Java設計模式 工廠設計模式

2021-09-10 23:46:46 字數 3708 閱讀 4158

工廠設計模式分為以下三種:

簡單工廠模式

工廠方法模式

抽象工廠模式

現在我想買一台電腦,有兩款可以選擇,一款是dell,另一款是hp.

現在對於這個問題用一般的思路來解決就是

inte***ce computer

class dellcomputer implements computer

}class hpcomputer implements computer

}public class client

public static void main(string args)

}

這裡使用乙個介面,兩個類來實現各個介面,在主方法中應用向上轉型來確定到底使用哪個類中的方法。

但是在上面的程式中例項化具體類的**在客戶端,是由客戶例項化這樣不符合生活邏輯,所以我們需要將例項化具體類的**從客戶端中抽取出來或者封裝起來,是它們不會干擾應用的其他部分

簡單工廠模式

簡單工廠模式:專門定義乙個類用來建立其他類的例項化,被建立的例項化通常擁有同乙個父類

就相當於你要買什麼電腦,只需要告訴我你要的牌子,將類的例項化交給工廠。

inte***ce computer

class dellcomputer implements computer

}class hpcomputer implements computer

}class compute***ctoryelse if (type.equals("hp"))

return computer;

}}public class client

public static void main(string args)

}

分析上面的**可以知道

簡單工廠模式結構為:

乙個抽象產品類(computer)

具體產品類(dellcomputer 和 hpcomputer)

乙個工廠(compute***ctory)

優點:實現起來簡單,

把類的例項化交給工廠,易於解耦

缺點:要想再新增具體產品需要修改工廠,違反了開放封閉原則

工廠方法模式

工廠方法模式:定義乙個用來建立物件的介面,讓子類決定例項化哪個類。

工廠方法模式是針對每個產品提供乙個工廠類,在客戶端中判斷使用哪個工廠類去建立物件,就相當於將之前的compute***ctory抽象成乙個介面,再用子類去實現介面中的方法。

inte***ce computer

class dellcomputer implements computer

}class hpcomputer implements computer

}inte***ce compute***ctory

class dellfactory implements compute***ctory

}class hpfactory implements compute***ctory

}public class client

public static void main(string args)

}

工廠方法模式是針對每個產品提供乙個工廠類,在客戶端判斷使用那個工廠去建立物件。

與簡單工廠模式不同的是,簡單工廠模式建立物件的邏輯判斷放在了工廠類中,客戶不知道具體的類,但是違背了開閉原則(如果要增加乙個產品就需要更改工廠類內部)。但是對於工廠方法模式而言,是將類的例項化提取出來,用多建立乙個介面來解決開閉原則,如果要再增加乙個產品只需要多寫乙個產品類和乙個工廠類去實現抽象產品介面和抽象工廠介面,不用去修改原有已存在的**。

但是工廠方法模式在客戶端就必須要感知到具體的工廠類,也就是將簡單工廠中工廠的邏輯判斷挪到客戶端。

工廠方法模式包括以下模板:

乙個抽象產品類

多個具體產品類

乙個抽象工廠類

多個具體工廠類 - 每乙個具體產品對應乙個具體工廠

優點降低了**耦合度,物件的生成交給子類去完成

實現了開放封閉原則-每次新增子產品不需要修改原有**

缺點增加了**量,每個具體的產品都需要乙個具體的工廠類

當增加抽象產品,也就是新增乙個其他產品族,需要修改工廠,違背了開放封閉原則(這句話的意思就是說,我現在不想要電腦,想要買乙個作業系統,那麼就需要對原有**進行修改。)

抽象工廠模式

抽象工廠模式和工廠方法模式基本上類似,只是工廠方法模式是生產一類商品,而抽象工廠模式可以生產兩類和兩類以上的商品。

inte***ce computer

class dellcomputer implements computer

}class hpcomputer implements computer

}inte***ce operatingsystem

class macossystem implements operatingsystem

}class windowssystem implements operatingsystem

}inte***ce compute***ctory

class dellfactory implements compute***ctory

@override

public operatingsystem instancesystem()

}class hpfactory implements compute***ctory

@override

public operatingsystem instancesystem()

}public class client

public void buysystem(operatingsystem operatingsystem)

public static void main(string args)

}

由上面**可以知道抽象工廠模式只是比工廠方法模式多了乙個產品類。在抽象工廠中多了乙個需要實現的產品方法。

所以抽象工廠模式只比工廠方法模式的結構多了抽象產品類

抽象工廠模式結構:

多個抽象產品類

具體產品類

抽象工廠類-宣告多個方法

具體工廠類-實現多個方法

優點:**解耦

抽象工廠模式中我們可以定義實現不止乙個介面,乙個工廠也可以生成不止乙個產品類,對於複雜物件的生產相當靈活易擴充套件

缺點:擴充套件產品族比較麻煩,而且違法開放封閉原則,因為要修改所有的工廠

由於抽象工廠模式是工廠方法模式的擴充套件,總體的來說很笨拙

總結:

簡單工廠模式最大的優點是工廠內有具體的邏輯去判斷生成什麼產品,將類的例項化交給工廠,這樣當我們需要什麼產品時只需要修改工廠而不需要去修改客戶端,對於客戶端來說降低了與具體產品的依賴

工廠方法模式是簡單工廠的擴充套件,工廠方法模式將原先簡單工廠模式中類裡面的邏輯判斷交給了客戶端,如果增加產品只需要修改客戶端和新增具體的功能,不需要去修改工廠類

抽象工廠模式是在工廠方法模式上的乙個擴充套件,把原先單一的只能生成乙個產品族的工廠方法模式擴充套件為可以生產多個產品族的抽象工廠模式,抽象工廠模式遵循了開放封閉原則,可以新增更多產品,具體工廠不僅僅可以生成單一的產品而是可以生成一組產品,抽象工廠也是宣告一組產品。但是在擴充套件產品族上還是很笨重不能滿足開放封閉原則(ocp)

Java設計模式 工廠設計模式

工廠模式 主要用來例項化有共同介面的類,工廠模式可以動態決定應該例項化那乙個類。工廠模式的形態 工廠模式主要用一下幾種形態 1 簡單工廠 factory 2 工廠方法 factory method 3 抽象工廠 abstract factory 簡單工廠 factory 又叫靜態工廠 是工廠模式三中...

java設計模式 工廠設計模式

工廠模式分為簡單工廠 工廠方法 抽象工廠模式 工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。利用工廠模式可以降低程式的耦合性,為後期的維護修改提供了很大的便利。將選擇實現類 建立物件統一管理和控制。從而將呼叫者跟我們的實現類解耦。簡單工廠模式相當於是乙個工廠中有各種產...

java設計模式 工廠模式

工廠模式 存在的目的 定義乙個用於建立複雜類的物件的介面。使用工廠模式,降低了類與類之間的耦合關係。分為三種實現方式 類之間的繼承結構不同 簡單工廠模式 工廠方法模式 抽象工廠模式。主要涉及的三種類 呼叫工廠的類,工廠類,產品類。先看乙個不適用工廠模式的類組織 class bmw32 class b...