設計模式之簡單工廠模式VS工廠模式

2021-08-15 09:01:38 字數 3484 閱讀 6958

一、簡單工廠模式

1、定義

簡單工廠模式屬於建立型模式,又叫靜態工廠方法(static factory method)。簡單工廠模式是由乙個工廠類物件決定建立

哪一種產品類的例項。

2、實現和角色

1) 實現:

簡單工廠模式的實質是由乙個工廠類的物件根據實際傳入的引數,動態的決定建立哪一種產品類的例項。

2)角色:

工廠角色(creator):簡單工廠模式的核心,負責實現建立產品類的例項的內部邏輯。

抽象產品角色(product):所有產品類共有的公共介面。

具體產品角色(concrete product):簡單工廠模式的建立目標,所建立的物件是此角色的具體類的例項。

3、優缺點:

1)優點:工廠類根據客戶傳入的引數動態的建立相應的例項,使得客戶端不再依賴具體的產品,解耦和。

2)缺點:工廠類實現了所有產品類的例項化邏輯,耦合度較高。當需要增加新的產品時,需要修改工廠類。

4、舉例

1)uml圖(uml圖說明,祥見)

2)運算操作符,工廠類:operatefactory, 抽象產品類:operate,具體產品類numberadd等

/**

* 工廠角色

* 工廠類

*/public class operatefactory

return operate;}}

抽象產品類

/**

* 抽象產品角色

*/public class operate

public void setnumbera(double numbera)

public double getnumberb()

public void setnumberb(double numberb)

public double getresult()

}

具體產品類:加法

/**

* 具體產品角色

* 加法類

*/public class numberadd extends operate

}

減法:

/**

* 具體產品角色

* 減法類

*/public class numbersub extends operate

}

乘法:

/**

* 具體產品角色

* 乘法

*/public class numbermul extends operate

}

除法:

/**

* 具體產品類角色

* 除法

*/public class numberdiv extends operate catch (exception e)

return 0d;

}double result = numbera / numberb;

return result;}}

從簡單工廠模式可以看出,當需要增加新的運算時,如numbera+numbera/numberb,就需要修改工廠類,增加case語句,這違背了開閉原則。

二、工廠模式

工廠模式去掉了簡單工廠模式中的靜態方法,分為抽象工廠介面,以及多個具體工廠子類,這樣分解了簡單工廠模式中工

廠類的壓力,由不同的子類工廠建立例項物件。即工廠方法將例項化物件延遲到了子類。

二,四個角色:(後文引用

工廠介面

:工廠介面是工廠方法模式的核心,與呼叫者直接互動用來提供產品。在實際程式設計中,有時候也會使用乙個抽象類來作為

與呼叫者互動的介面,其本質上是一樣的。

工廠實現:在程式設計中,工廠實現決定如何例項化產品,是實現擴充套件的途徑,需要有多少種產品,就需要有多少個具體的工廠實現。

產品介面:產品介面的主要目的是定義產品的規範,所有的產品實現都必須遵循產品介面定義的規範。產品介面是呼叫者最為關心的,產品介面定義的優劣直接決定了呼叫者**的穩定性。同樣,產品介面也可以用抽象類來代替,但要注意最好不要違反黎克特制替換原則。

產品實現:實現產品介面的具體類,決定了產品在客戶端中的具體行為。

三,優點:建立物件的介面,讓子類去決定具體例項化的物件,把簡單的內部邏輯判斷移到了客戶端**。工廠方法克服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝物件建立過程的優點。

四,理解:如下圖,上面那個例子可這樣改:

利用依賴倒置原則,把工廠類抽象出乙個介面,裡面只有乙個建立抽象產品的方法,然後所有的要生成具體類的工廠去實現這個介面,這樣:

乙個簡單工程模式的工廠類就變成了乙個工廠抽象介面和多個具體生成物件的工廠,當我們需要增加例如m的n次方時,就不需要去修改原有的工廠類,只需要增加此功能的運算類和相應的工程類即可。如上圖所示。

先構建工廠介面:

inte***ce ifactory
具體工廠類:addfactory等

public class addfactory implements ifactory 

}

public class subfactory implements ifactory 

}

public class mulfactory implements ifactory 

}

public class divfactory implements ifactory 

}

客戶端:

public class client 

}

總結:

簡單工廠模式是工廠類包含了必要的邏輯,根據傳入的引數動態的決定需要例項化的類。這樣由於新增加產品類時,就需要

修改工廠類,違反了開閉原則。

工廠模式避免了簡單工廠模式的弊端,將例項化延遲到子類,新增加產品類時不需要修改工廠類,而是增加相應的工廠方法即

可。但例項化哪個類的邏輯卻放到了客戶端。

設計模式 工廠模式之簡單工廠

工廠模式可以分為 簡單工廠模式 普通工廠模式 靜態工廠模式 抽象工廠模式 簡單工廠模式 就是如何去例項化物件的問題,對於很容易變化的問題,應該考慮用乙個單獨的類來做這個創造例項的過程,這個單獨的類就是工廠 例子 通過簡單工廠建立各種圖形的實現過程 簡單工廠模式建立步驟 建立乙個介面 例 圖形介面 建...

設計模式 工廠模式之簡單工廠

我們常見的設計模式,大致可以分為三大類 建立型 結構性 行為型。工廠模式,屬於建立型。工廠模式到底起的是什麼作用呢?概括來說就是解耦。當某一類物件需要頻繁建立的時候,就會和程式產生比較大的耦合,在物件初始化屬性較多時,工廠模式可以較少這種耦合,這就是他的作用。一般情況下根據場景不同,工廠模式有幾種不...

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...