抽象工廠模式(abstract factory):提供乙個建立一些列相關或相互依賴物件的介面,而無需指定它們具體的類。
優點:
1.易於變換產品系列,由於具體工廠類,在乙個應用中只需要初始化一次,這就使得改變乙個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。
2.它讓具體的建立例項過程與客戶端分離,客戶端是通過他們的抽象介面操縱例項,產品的具體類名也被具體工廠的實現分離,不會出現客戶**中。
缺點:
當需要新增乙個產品時(對照下面的uml圖),如何productc,那麼就需要新增abstactproductc,productc和修改abstractfactory、concretefactory1和concretefactory2,修改量太大。
abstractproducta和abstractproductb是兩個抽象產品,之所以為抽象,是因為它們都有可能有兩個不同的實現,而producta1、producta2和productb1、productb2就是對兩個抽象產品的具體分類的實現。
ifactory是乙個抽象工廠介面,它裡面應該包含所有的產品建立的抽象方法。而concretefactory1和concretefactory2就是具體的工廠。
通常在執行時刻在建立乙個concretefactory類的例項,這個具體的工廠再建立具有特定實現的產品物件,也就是說,為建立不同的產品物件,客戶端應使用不同的具體工廠。
//abstractproducta類
#ifndef _abstractproducta_hpp
#define _abstractproducta_hpp
class
abstractproducta;
#endif
//abstractproductb類
#ifndef _abstractproductb_hpp
#define _abstractproductb_hpp
class
abstractproductb;
#endif
//producta1類
#ifndef _producta1_hpp
#define _producta1_hpp#include
#include
"abstractproducta.hpp
"using
namespace
std;
class producta1 : public
abstractproducta
};#endif
//producta2類
#ifndef _producta2_hpp
#define _producta2_hpp#include
#include
"abstractproducta.hpp
"using
namespace
std;
class producta2 : public
abstractproducta
};#endif
//abstractproductb類
#ifndef _abstractproductb_hpp
#define _abstractproductb_hpp
class
abstractproductb;
#endif
//productb1類
#ifndef _productb1_hpp
#define _productb1_hpp#include
#include
"abstractproductb.hpp
"using
namespace
std;
class productb1 : public
abstractproductb
};#endif
//productb2類
#ifndef _productb2_hpp
#define _productb2_hpp#include
#include
"abstractproductb.hpp
"using
namespace
std;
class productb2 : public
abstractproductb
};#endif
//輸出結果:客戶端程式
#include#include
"concretefactory1.hpp
"#include
"concretefactory2.hpp
"#include
"abstractproducta.hpp
"#include
"abstractproductb.hpp
"using
namespace
std;
intmain()
Chapter15 程式例項
購物籃程式 模擬虛拷貝 1 class basket29 double total recipt ostream os const 1016 17 private 18 static bool compare shared ptr lhs,shared ptr rhs 1922 multiset,d...
Chapter 15 程序間通訊
純屬抄書。cry size large ipc interprocess communication 管道 pipe 大多是半雙工,程序族裡應用 fifo命名管道 mkfifo 不同程序,是一種檔案型別。訊息佇列 queue 訊號量 semaphore 與123不同,是乙個計數器,用於多程序共享資料...
chapter 15 深度學習的硬體與方法
目前cnn rnn等神經網路已經有了長足的發展,但它由於結構太過複雜,導致體積 對算力的要求以及能耗都大幅提高。在開始之前,先簡單了解下硬體的基礎知識 關於推斷的介紹,可見 我的理解是,推斷可以理解為應用。在訓練好神經網路後,部署到裝置上後,裝置執行的過程,稱為推斷。一 剪枝 pruning 去除掉...