工廠模式的定義:
假如你有乙個類a,要例項化這個類,最簡單的方法就是a a=new a()。如果要做一 些初始化的工作,通常會把這些操作寫在a的構造方法裡例如:a a =new a(parmeter);
但是,也許有很多的初始化內容,如果把所有內容都放在建構函式裡面,就很不合適。在這種情境下就可以使用工廠模式,協助完成一系列初始化工作。
工廠模式通常有3種形態:簡單工廠模式、工廠方法模式、抽象工廠模式。
下面就以農產品管理系統的集中水果和蔬菜(蘋果、橘子、葡萄、番茄、冬瓜、胡蘿蔔)為例簡要介紹這三種形態的工廠
******factory模式的結構如圖
******factory模式的目的是專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有相同的父類
**實現
//定義水果(fruit)介面
public
inte***ce
fruit
//定義蘋果類實現水果介面
public
class
implements
fruit
@override
public
void
expressedjuice()
}//定義葡萄類實現水果介面
public
class
grape
implements
fruit
@override
public
void
expressedjuice()
}//定義橙子類實現水果介面
public
class
orange
implements
fruit
@override
public
void
expressedjuice()
}//定義水果工廠(fruitfactory)類
public
class
fruitfactory else
if(which==2)else
if (which==3) else
}}//編寫客戶(client)類
public
class
client
}
輸出結果:
從上面**可以看出,當要運送水果時,只需向水果工廠(fruitfactory)請求就可以了。水果工廠在街道請求後,會自行判斷建立和提供哪種水果。
對於簡單工廠模式,如果要引增加一種或者幾種水果就比較麻煩。這是除了要定義及個新增的水果類外,還必須修改水果工廠和客戶端。從而可以看出比較麻煩,****** factory 模式開放性比較差。
要解決這種開放性比較差的問題,需要用到下面介紹的factory method(工廠方法模式)
factory method模式的結構如圖
**實現
//將水果工廠定義為介面而不是類
public
inte***ce
fruitfactory
public
class
implements
fruitfactory
}public
class
trafficgrape
implements
fruitfactory
}public
class
trafficorange
implements
fruitfactory
}//客戶類
public
class
client
}
測試結果:
從上面的**可以看出,工廠模式的核心在於乙個抽象工廠類,它允許許多具體類從抽象工廠類中繼承其建立行為。
factory method模式針對只是一種類別(fruit),如果還要運送蔬菜就不行了。在這種情況下,必須用到下面將要介紹的abstract factory(抽象工廠模式)。
**實現
//定義乙個蔬菜(vegetable)介面
public
inte***ce
vegetable
//定義冬瓜(whitegourd)類實現蔬菜介面
public
class
whitegourd
implements
vegetable
@override
public
void
cook()
}//定義胡蘿蔔(carrot)類實現蔬菜介面
public
class
carrot
implements
vegetable
@override
public
void
cook()
}//定義番茄(tomato)類實現蔬菜介面
public
class
tomato
implements
vegetable
@override
public
void
cook()
}//定義運送工廠介面
public
class
trafficfactory
implements
itrafficfactory
@override
public vegetable trafficvegetable(vegetable whichvegetable)
}//定義運送工廠(itrafficfactory)類實現運送工廠介面(trafficfactory)
public
class
trafficfactory
implements
itrafficfactory
@override
public vegetable trafficvegetable(vegetable whichvegetable)
}//編寫客戶類
public
class
client
}
測試結果:
abstract factory 模式只需向客戶端提供乙個介面,使得客戶端在不必指定運送農產品的具體類的情況下,建立多個型別中的產品物件。
設計模式 工廠模式(學習筆記)
披薩專案 要方便專案的擴充套件,要便於維護 要能執行時擴充套件。披薩族設計 不足之處 披薩只能prepare bake cut box操作,增加新功能需要更改原始抽象類,程式擴充套件性低。簡單工廠模式的設計方案 定義乙個例項化披薩物件的類,封裝建立物件的 將例項部分與抽象超類分隔開,放在工廠裡提高擴...
設計模式學習筆記 4 工廠模式
工廠模式 定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類本例項化推遲大子類。設計原則 要依賴抽象,不要依賴具體類。1.定義pizzastore的抽象類 2.定義pizza的抽象類 3.實現pizzastore類 chicagopizzastore nypizzastore ...
設計模式學習筆記 抽象工廠模式
定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...