設計模式 第一章工廠模式

2021-10-10 01:42:04 字數 2765 閱讀 7963

​ 乙個物件應該只包含單一的職責,並且該職責被完整的封裝到乙個類中

​ 軟體實體應該對擴充套件開放,對修改關閉

​ 所有引用基類的地方必須能透明的使用其子類物件

​ 高層模組不應該依賴底層模組,他們都應該依賴抽象,抽象不應該依賴細節,細節應該依賴於抽象

​ 客戶端不應該依賴他那些不需要的介面

優先使用物件組合,而不是通過繼承達到復用的目的

每乙個軟體單位對其他單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟體單位

2.1.1簡單工廠模式實現

抽象產品: 將要批量生產的物件實體進行乙個抽象提取,便於擴充套件更多實體

public

abstract

class

product

//宣告抽象業務方法

public

abstract

void

methoddiff()

;}

具體產品:繼承抽象產品,將產品例項化:比如(披薩是抽象產品,例項化產品可以是各種口味的披薩,胡椒味,麻辣味等等)

public

class

concreteproduct extdents product

}

工廠類:簡單工廠的核心,根據使用者傳入不同引數來建立不同型別的產品物件。比如(傳入胡椒味,建立胡椒味具體的例項物件),若要新增新的產品生產,只用新增乙個實體類,在工廠類的靜態工廠方法中新增乙個else if 即可。

public

class

factory

else

if(arg.

equalsignorecase

("b"))

return product;

}}

具體客戶端使用:傳入不同引數,建立不同實體類

public

class

client

}

2.1.2 簡單工廠模式優缺點

優點:簡單工廠實現了物件建立和使用的分離,客戶端無需知道建立的具體類名,只需知道要傳的引數即可得到物件。實現了解耦

缺點:使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構,擴充套件困難,一旦實體類多了,要擴張就會修改工廠的邏輯,不利於維護。適用於那種建立物件較少,業務邏輯簡單的情況。

2.2.1工廠方法模式結構

(1)product(抽象產品):它是定義產品的乙個介面,是工廠方法模式所建立物件的超型別,公共父類

(2)concreteproduct(具體產品):對抽象產品的乙個具體實現。

(3)factory(抽象工廠):宣告了乙個工廠方法,用於返回乙個抽象產品。(核心)

(4)concretefactory(具體工廠): 是抽象工廠的子類,返回乙個具體產品

2.2.1 工廠方法模式實現

(1)抽象工廠:對具體工廠進行的乙個統一抽象,便於後面的擴充套件

public

inte***ce

factory

(2)具體工廠:返回工廠的具體產品

public

class

concretefactory

implements

factory

}

2.2.2 工廠方法模式優缺點

(1)優點:系統中加入新產品時,只要新增乙個具體的工廠和具體產品即可,系統的擴充套件性提高了,符合開閉原則

(2)缺點:當產品類增加的時候,要新增的具體工廠類也要隨著增加,增加了系統的複雜度,給系統也帶來了額外的開銷。多了乙個抽象工廠,增加了系統的抽象性和理解難度。

2.3.1抽象工廠模式結構圖

2.3.2 抽象工廠模式實現

抽象工廠類

public

inte***ce

abstractfactory

具體工廠類

public

class

concretefactory1

implements

abstractfactory

//工廠方法二

public abstractproductb creatproductb()

}

2.3.3 抽象工廠模式優缺點

優點:隔離了具體類的生成,使得客戶端並不需要知道什麼被建立;當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端只使用同乙個產品族中的物件;增加新產品族很方便,無需修改已有系統,符合開閉原則。

缺點:主要是增加新的產品等級結構麻煩,需要對原有系統進行較大的修改,甚至需要修改抽象層**,違背了開閉原則。

大話設計模式 第一章 簡單工廠模式

實現乙個計算器控制台程式 活字印刷 第一,要改,只需改要改之字,此為可維護 第二,這些字用完依然可用,此為可復用 第三,若要加字只需另刻再加入即可,此為可擴充套件 第四,可橫排可豎排,此為靈活性好 複製vs復用 將計算和顯示分開 即將業務邏輯和介面邏輯分開 public class operatio...

第一章 Cach 設計模式 簡單工廠模式

工廠類運算類 加法類減法類 乘法類除法類 指數類思考 可能會寫成這樣 w class pha.yx.design.program getresult classmethod getresult 缺點 if表示式每次都需要判斷,等於計算機做了三次無用功。如果除法,輸入了0,除法會報錯。輸入第乙個數字 ...

大話設計模式 第一章簡單工廠模式

物件導向的三大特性 封裝,繼承,多型。1,定義乙個運算基類,所有的運算都繼承自它 所有運算的基類 class operation 2,定義所有的運算類,繼承自運算基類operation view code 下面的類都繼承自operation,過載了getresult class operationa...