設計模式學習筆記(三) 工廠模式

2021-08-10 02:30:06 字數 3690 閱讀 8801

工廠模式的定義:

假如你有乙個類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 ...

設計模式學習筆記 抽象工廠模式

定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...