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

2021-07-25 17:35:57 字數 3584 閱讀 8365

看一下head first中披薩的例子:

披薩的簡單工廠類******pizzafactory:

public

class

******pizzafactory else

if(type.equals("peoperoi")) else

if(type.equals("clam"))

return pizza;

}}

披薩店的類pizzastore:

public

class

pizzastore

public pizza orderpizza(string type)

}

披薩類自然就是包含基本的方法和披薩的一些引數,這裡不做展示了,看下主類中的呼叫:

public

class

testfactory

}

head first中提到,準確的說簡單工廠更像是程式設計習慣而不是乙個完全的「工廠模式」,其作用就是把建立物件的**與業務邏輯**中提出來,使其能復用並且使業務**更加整潔。

簡單工廠中使createpizza方法放在了工廠類中實現,但是當開了幾家加盟店的時候這樣的方式就不太好處理了,這裡來看一下工廠方法如何來解決這個問題。

將頂級的商店pizzastore設計為抽象類,其中的createpizza方法也為抽象方法,具體實現交給加盟店去實現。

public

abstract

class

pizzastore

public

abstract pizza createpizaa(string type);

}

下面我們來開一家中國的分店:

public

class

cnpizzastore

extends

pizzastore else

if(type.equals("peoperoi")) else

if(type.equals("clam")) else

}}

主類中店乙份中國披薩店的cheese披薩:

public

class

testfactory

}

在之前的基礎上我們來重新做披薩

定義披薩原料工廠的介面:

public

inte***ce

pizzaingredientfactory

具體的原料工廠(紐約原料工廠):

public

class

nypizzaingredientfactory

implements

pizzaingredientfactory

@override

public sauce createsauce()

@override

public cheese createcheese()

@override

public veggies createveggies() ;

return veggies;

}@override

public clams createclam()

}

芝士披薩:

public

public

class

nypizzaingredientfactory

implements

pizzaingredientfactory

@override

public sauce createsauce()

@override

public cheese createcheese()

@override

public veggies createveggies() ;

return veggies;

}@override

public clams createclam()

}class cheesepizza extends pizza

void prepare()

}

定義的抽象披薩類pizza:

public

abstract

class

pizza

void cut()

void box()

void setname(strign name)

string getname()

public string tostring()

}

蛤蜊披薩:

public

class

clampizza

extends

pizza

void prepare()

}

紐約披薩店:

public

class

nypizzastore

extends

pizzastore else

if (item.equals("veggie")) else

if (item.equals("peperoni"))

return pizza;

}}

其實抽象工廠方法中是包含了工廠方法的設計思想,工廠方法設計梗概就是提供乙個產品的抽象介面(比如披薩店),然後具體類(例如中國披薩店,美國披薩店)實現自這個介面,之後通過不同的工廠例項來建立不同的產品例項。

抽象工廠就是定義了乙個基本的工廠介面,之後的每個工廠的例項都有對應的基本功能。

下面我用大白話來談談我的理解:

簡單工廠:相當於有個提供生產的工廠,然後你在你自己的店鋪中,客人需要什麼型別的吃的,你就直接從工廠那邊進貨就好了,但是問題就在於你目前什麼都在從工廠那邊拿,你生意做大了之後新增商品的時候不光需要改動自己的店鋪還需要改動工廠。

工廠方法:工廠先定下做整件事情的流程,具體怎麼做就是交給各個下一級**工廠去實現,這麼做的好處就是容易新增新的類別產品(比如我在中國開了家中國風味的餐廳,有人在美國開了一家美國風味的餐廳等等),缺點是沒有乙個整體的約束,下一級**(子類)想怎麼幹就怎麼幹。

抽象工廠:這個就類似於連鎖店了,總部提供原料和製作方法,下一級**的各個分部需要嚴格按照總部的要求來做,只不過這件事情交給下級來做。缺點是在不修改工廠的前提下很難新增新商品。

這裡同時也引用一下別人總結的三種工廠方法的區別:

簡單工廠 : 用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)

工廠方法 :用來生產同一等級結構中的固定產品。(支援增加任意產品)

抽象工廠 :用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支援增加產品族)

java設計模式之工廠模式

工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某乙個類的例項,通常這一組類有乙個公共的抽象父類或者是介面並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義乙個父類或者介面,該類的子類通過不同的方法實現了父類中的方法。然後需要定義乙個工...

java設計模式之工廠模式

1 只要方法裡面控制產生物件的方法,就可稱為工廠相關方法。2 單例 多例。3 簡單工廠 例子 交通工具 多種交通工具 多種交通工具不同的生產過程 4 介面抽象類使用 一般乙個特性使用介面 會飛的 大概能定義為乙個物體使用抽象類 由於類的多繼承性,建議多用介面。5 抽象工廠 換掉一些列的產品,擴充套件...

java設計模式之工廠模式

工廠模式包括工廠方法模式和抽象工廠模式兩種。實際是將介面的例項建立交給乙個工廠類來做。1.工廠方法模式 又包括普通工廠模式 多方法工廠模式 靜態工廠模式三種設計方式。例如 介面 public inte ce father 實現類public class child1 implements fathe...