1、為了提高內聚和松耦合,我們經常會抽象出一些類的公共介面以形成抽象基類或者介面。這樣我們可以通過宣告乙個指向基類的指標來指向實際的子類實現,達到了多型的目的。這裡很容易出現的乙個問題是:若干個子類繼承自抽象基類,我們必須在每次要用到子類的地方就寫如: new ×××; 的**。這裡帶來兩個問題:
(1)客戶程式設計師必須知道實際子類的名稱(當系統複雜後,命名將是乙個很不好處理的問題,為了處理可能的名字衝突,有的命名可能並不是具有很好的可讀性和可記憶性,而且每個程式設計師都有自己的程式設計命名風格)
(2)程式的擴充套件性和維護也會變得越來越困難。
2、另一種情況就是在父類中並不知道到具體要例項化哪乙個具體的子類。比如類a中使用到類b,但類b是乙個抽象父類,類a並不知道要例項化類b的哪乙個子類,因此類a表示很懵逼。
這兩個問題就引出了工廠模式最重要的功能:
1、定義建立物件的介面,封裝物件的建立;
2、延遲具體化類的工作到子類中。
總的來說:工廠模式主要解決介面選擇的問題,該模式下定義乙個建立物件的介面,讓子類自己決定要例項化哪乙個工廠類,使其建立過程延遲到子類進行。
#include using namespace std;
// product block
class product
};class concreteproduct :public product
~concreteproduct()
};// factory block
class factory
};class concretefactory :public factory //具體
concretefactory()
product* createproduct() // 重寫生產 產品類 };
int main()
程式這裡有點問題:
不知道為什麼?然後我在product類的虛析構函式那右鍵 【快速操作和重構】,生成它的定義,然後還有factory類中的虛析構函式也是一樣的操作,然後就好了。很懵。。。
這是執行結果
class abs_producta // 抽象產品類a
protected:
abs_producta()
};class abs_productb // 抽象產品類b
protected:
abs_productb()
};class producta1 :public abs_producta
~producta1()
};class producta2 :public abs_producta
~producta2()
};class productb1 :public abs_productb
~productb1()
};class productb2 :public abs_productb
~productb2()
};//abstract factory block
class abs_factory
virtual abs_producta* createproducta() = 0;
virtual abs_productb* createproductb() = 0;
protected:
abs_factory()
};class concretefactory1 :public abs_factory
~concretefactory1()
abs_producta* createproducta()
abs_productb* createproductb()
};class concretefactory2 :public abs_factory
~concretefactory2()
abs_producta* createproducta()
abs_productb* createproductb()
};int main()
執行結果
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠
在看抽象工廠前,我們需要引入兩個概念 1 產品等級結構 2 產品族 我們現在有這樣兩個產品型別 汽車 car 自行車 bike 有兩家公司 寶馬 bmw 奧迪 audi 每乙個廠家都能夠生產這兩種型別的產品 bmw介面 bmwcar,bmwbike audi介面 audicar,audibike 在...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...