如果b需要輸出c,c需要輸出b,怎麼處理。第一步是修改配置引數modulebinputpara與 modulecinputpara ,第二步是修改介面infa0,增加兩條case項。 (簡單工廠模式)
【優點】b,c模組與a模組偶合小。b與c不需要修改**。實現前提是將b,c 相關部分抽象成介面(infa0).
【缺點】infa0管理更多分支。
怎麼去解決此問題呢?可用指向函式的指標代替介面。(類似工廠方法模式)
void (pfun *)(int);
void moduleb(void)
void modulec(void)
int main()
pfun = infa0;
moduleb();
modulec();
【優點】b,c與a盡一步解耦
【缺點】如果pfun在沒初始化前使用會出現野指標。
(二)上面a類似工廠,b與c類似客戶。同時print 動作抽象到具體產品
圖1:簡單工廠模式
客戶(b/c)依賴a介面類,如果客戶直接依賴產品1或產品2,如果客戶有需要變更時,b/c需要修改大量實體**。耦合性較差。
1 #include
2 using namespace std;
34 class product
5 ;9
10 class product1:public product
11 如果使用者需要更改產品的型別(類似(一)中介面變化啦)。此時如果使用者已生產了多個產品,每個產品都要更換。(fact.createproduct(2-->1).工廠方法可解決此問題。
修改factory
class factory
;class factory1:public factory
public:
product *createproduct()
return new product1;
class factory2:public factory
public:
product *createproduct()
return new product2;
int main()
factory *fact = new factory1(); // 更改時,僅需要修改為 new factory2()
product *prod;
prod = fact .createproduct();
prod = fact .createproduct();
prod->produce();
return 0;
}圖2, 工廠方法類圖
工廠模式理解
例如乙個基類pet有許多個子類,聲稱這個體系中的隨機物件,當這個體系不斷有新子類增加的時候,因為該繼承體系中已經存在了常規的基礎,所以就有可能出現問題 考慮一點,為每個子類增加靜態初始化器,但是問題是 靜態初始化器只能在類首先被載入的時候才能被呼叫,而生成器在其列表中如果沒有這個類,他就永遠不能被呼...
工廠模式理解
工廠模式是一種建立型的設計模式,所謂建立型設計模式,不是簡單的使用new方法 例項化物件,建立物件時在 由誰?建立什麼?何時?等方面,提高了設計的靈活性。比如,普通工廠模式 對實現同一介面的類進行例項建立。需求 定義乙個生產龍蝦的工廠,通過使用這個工廠能烹飪各種龍蝦。思路 定義乙個工廠類,去建立其他...
設計模式 工廠模式理解
工廠模式在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用乙個共同的介面來指向新建立的物件。在物件導向設計中工廠模式是程式設計的首先模式。為了深入理解這個概念,首先講一下 工廠 的概念。工廠是可以大量重複生產相同產品的場所。對於工廠來講,生產一件產品和生產一萬件產品在技術和管理層面上不應該有本質差...