java設計模式 (2)工廠模式

2021-09-02 15:05:10 字數 3404 閱讀 3106

工廠模式就是自己不去例項化物件,而使用物件工廠去例項化物件,大致分3種:簡單工廠模式、工廠模式、抽象工廠模式

先定義幾個類:person類,人這個類是個父類,而人分很多種人,這裡舉例子有student類和teacher類繼承了person類。

簡單工廠模式

public class personfactory 

return person;

}}

定義乙個人類工廠,工廠有個靜態方法根據不同型別的引數來造不同的人:

public static void main(string args)
這是最簡單的工廠模式,在業務簡單中他的確比較好使。但是他有個問題就是工廠類裡面的設計不符合「開放-封閉」原則。如果業務有改動,比如要加個master校長類,就得去改這個類,每次修改業務都要去改工廠類,這是不合適的。所以在簡單工廠模式的基礎上有個工廠模式。

工廠模式

為了不去改工廠類中的方法,所以把工廠類做成乙個介面,介面中定義工廠方法:

public inte***ce personfactory
然後根據工廠類中的各個條件分支分別去寫各種工廠介面的實現類,建立學生的工廠類studentfactory

public class studentfactory implements personfactory

}

建立老師的工廠類teache***ctory

public class teache***ctory implements personfactory

}

如果再要加建立校長的工廠類的話只需要實現personfactory介面,然後按照其邏輯來實現createperson()方法即可。

呼叫的地方 直接呼叫相應的實現類中的方法就可以建立相應的物件了:

public static void main(string args)
然而這樣也不是完全就沒有任何問題的,相像一下如果要建立世界上所有職業型別的人類,那就要去寫「司機」、「前台」、「老闆」…無數個工廠類了,這肯定是不行的,所以**可以再提練一下:

public class personfactory  catch (instantiationexception | illegalacces***ception | classnotfoundexception e) 

return (t) p;

}}

動態的傳乙個類型別過來,然後再根據類型別來建立對應的物件,這樣就不用去寫各種型別的實現工廠類了。測試如下:

public class personfactorytest 

}

這樣就不用再去乙個個的寫工廠類了,只用寫繼承person類的實體類就行了。

抽象工廠模式

抽象工廠模式(abstract factory pattern)是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。抽象工廠模式意圖提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。主要解決介面選擇的問題,系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。

接著上面的**舉例子,這裡先定義乙個「系列產品」:studentfemalestudentmaleteacherfemaleteachermale分別是女學生、男學生、女老師、男教師。他們可以抽象成2類,男性、女性:

// 男性產品抽象介面

public inte***ce imale

// 女性產品抽象介面

public inte***ce ifemale

每個產品分別實現對應的抽象介面,此處只貼乙個「產品」,男老師的**,其他幾個的**都是一樣的:

public class teachermale implements imale 

public string getname()

public void setname(string name)

public teachermale(string name)

}

「產品」定義好了,再定義一下超級工廠personfactory介面:

public inte***ce personfactory
這個工廠裡面定義2個介面,建立男性和建立女性,超級工廠定義好了後,一般的工廠再來實現這個超級工廠:

建立學生的工廠studentfactory類:

public class studentfactory implements personfactory 

@override

public ifemale createfemale(string name)

}

建立老師的工廠teache***ctory類:

public class teache***ctory implements personfactory 

@override

public ifemale createfemale(string name)

}

至此抽象工廠模式就寫好了,看測試:

public class maintest 

}

測試輸出:

studentfemale...constructor

studentmale...constructor

teacherfemale...constructor

teachermale...constructor

studentfemale...女 學生

studentmale...男 學生

teacherfemale...女 教師

teachermale...男 教師

最後再畫個草圖示意一下:

Java設計模式2 工廠模式

1 為什麼要使用工廠模式?在物件導向程式設計中,最通常的方法是乙個new操作符產生乙個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下,new操作符直接生成物件會帶來一些問題。許多態別物件的創造需要一系列的步驟 你可能需要計算或取得物件的初始設定 選擇生成哪個子物件例項 或在生成你需要...

java設計模式2 工廠

工廠模式分為四種 1 簡單工廠模式 2 靜態工廠模式 3 工廠方法模式 4 抽象工廠模式 一.簡單工廠模式 用乙個工廠類,來管理,通過傳入的引數不同,各自生成不同的子類物件。以傳送資訊為例,有多種傳送方式,子類傳送方式繼承父類。通過乙個工廠類來控制,不同引數傳入返回不同的物件。public clas...

java設計模式之工廠模式(2)

工廠模式 屬於建立型模式。同我們生活中的廠家很相似。我們並不自己製造 new 產品,而是依靠廠家製造,我們只是拿來使用。簡單的說就是讓工廠 根據我們的需求給我們new乙個物件。工廠模式又分為工廠方法模式和抽象工廠模式。工廠方法模式又分為 普通工廠方法,靜態工廠方法.package com.patte...