簡單工廠 工廠方法和抽象工廠的區別

2021-06-22 02:00:27 字數 2798 閱讀 4185

1、簡單工廠模式

定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同父類。因為在簡單工廠模式中用於建立例項的方法是靜態方法,所以簡單工廠模式也可以稱為靜態工廠方法模式,是一種類建立型模式。

在簡單工廠模式中,工廠類只生產一類產品,所有具體的產品的建立都集中於工廠類中,根據所傳入引數的不同可以建立不同的產品物件。

簡單工廠模式中的角色:

工廠角色:實現建立所有產品例項的內部邏輯;

抽象產品角色:工廠類所建立的所有物件的父類,封裝了各種產品物件的公有方法;

具體產品角色:每乙個具體角色都繼承了抽象產品的角色,需要實現抽象產品中宣告的抽象方法。

2、工廠方法模式

定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化,它讓乙個類的例項化延遲到子類。它提供乙個抽象工廠介面來宣告抽象工廠方法,而由其子類來具體實現工廠方法,建立具體的產品物件。它是基於工廠角色和產品角色的多型性而設計的。在系統中新增新產品時,無須修改抽象工廠類,只需新增乙個新工廠類和新產品類就可以了。即工廠類可以生產多類產品。相應的產品由相對應的工廠來生產。

工廠方法模式中角色:

抽象產品:定義產品的介面,是產品物件的公共父類;

具體產品:實現了抽象產品介面,某種具體的產品由專門的具體工廠建立,即具體產品與具體工廠一一對應;

抽象工廠:宣告了工廠方法,用於返回乙個產品。所有建立物件的工廠類都必須實現該介面。

具體工廠:是抽象工廠的子類,實現了抽象工廠中定義的工廠方法,返回的是乙個具體產品類的例項。

3、抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。在它的抽象工廠類中,它宣告了可以生產一族產品的方法,而每乙個方法又對應一種產品。

抽象工廠模式中的角色

抽象工廠:宣告一組用於建立產品的方法,每乙個方法對應一種產品;

具體工廠:實現在抽象工廠中宣告的建立產品的方法,生成一組具體產品,這些產品構成了乙個產品族;

抽象產品:為每種產品宣告介面,在抽象產品中宣告了產品所具有的業務方法;

具體產品:具體工廠生產的具體產品物件,實現抽象產品介面中宣告的業務方法。

三種的比較,例如

要建立幾種不同的圖形,即圓形、方形、三角形,可以使用簡單工廠模式;

如果要建立很多種不同的圖形,即圓形、方形、三角形、五角形等等,使用工廠方法模式;

如果要建立各種不同顏色不同形狀的圖形,這時就該使用抽象工廠模式了,可以把這幾種的圖形的共性抽象出來。

具體例子:

簡單工廠:

class singlecore//處理器,抽象產品

else

cout<<"no creating object"<

#ifndef corefactory_h

#define corefactory_h

#include using namespace std;

#include "singlecore.h"

#include "multicore.h"

class corefactory //生產處理器的工廠,抽象工廠{

public:

corefactory()

{ cout<<" construted corefactory "class singlecore//單核處理器,抽象產品

{public:

singlecore()

{ cout<<" construted singlecore "#include "corefactory.h"

int main()

{ int type;

cout<<" input type of the product: ";

cin>>type;

switch( type )

{ case 1:

{ corefactory * factorya1 = new corefactorya();//建立a型工廠

singlecore * singlecore1 = factorya1->createsinglecore();//生產a型單核處理器

coutcout<

#ifndef abstract factory_h

#define abstract factory_h

#include using namespace std;

#include "idepartment.h"

#include "iuser.h"

class factory//抽象工廠

//包括access工廠和department工廠

{public:

factory()

{ cout<<" constructed factory "class idepartment//部門抽象介面,抽象產品一

//部門包括access部門和sql部門

{public:

idepartment()

{ cout<<" constructed idepartment "class iuser//使用者抽象介面,用於產生不同的使用者,抽象產品二

//它包括access使用者和sql使用者

{public:

iuser()

{ cout<<" constructed iuser "idepartment* depart = factory->createdepartment();//建立sql部門

coutdepart->getdepartment();

cout<

簡單工廠,工廠方法,抽象工廠

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。本文是本人對這三種模式學習後的乙個小結以及對他們之間的區別的理解。簡單工廠 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數的不同來返回不...

簡單工廠 工廠方法 抽象工廠

簡單工廠 乙個工廠類 根據傳入的參量決定建立出哪一種產品類的例項 直接乙個工廠類,內部通過 swith operator add類實現該介面 adddao implements dao dao的實現類 客戶端 dao dao new adddao dao.createoper 產生物件 這樣如果需要...

簡單工廠 工廠方法 抽象工廠

一 簡單工廠 factory 集中管理物件的產生,業務 只需要呼叫相應的方法,傳入不同的引數區分物件,就能得到想要的物件了 把業務 和對應的物件解耦 建立乙個抽象類 public abstract class cellphone public abstract void show 建立實現抽象類的實...