簡化乙個事物有很多種方法,也就是換乙個容易記住的稱呼,最簡單的當然就是數字作為代號,但需要使用某個具體類的功能時就指出它的代號,讓它生產物件並呼叫它的成員方法,這樣使用者就不必關心物件的生成細節。生成的物件一般以指標的形式返回(方便對物件內部成員方法的呼叫)。這就和工廠生產產品很像,機器都有編號,乙個機器生產一種產品,使用者只用找對機器編號就可以生產對應的產品,不需要顧及編號對應的是哪台機器和產品的生成細節。乙個工廠生產多種產品。
factory 模式不單是提供了建立物件的介面,其最重要的是延遲了子類的例項化,該模式的應用並不是只是為了封裝物件的建立,而是要把物件的建立放到子類中實現(factory 中只是提供了物件建立的介面,其實現將放在 factory 的子concretefactory 中進行)。
class fruit//抽象類
virtual void operation() = 0; //水果生產函式
protected:
std::string mname; //只是本類和子類可見
};};
class banana :public fruit
virtual void operation() };
class pear :public fruit
virtual void operation()
};factory.cpp
#include using namespace std;
#include "fruit.h"
class factory
}};int main()
factory 模式對於物件的建立給予開發人員提供了很好的實現策略,但是factory 模式僅僅侷限於一類類(就是說 product 是一類,有乙個共同的基類),如果我們要為不同類的類提供乙個物件建立的介面,那就要用 abstractfactory 了。
abstractfactory 模式關鍵就是將這一組物件的建立封裝到乙個用於建立物件的類( concretefactory) 中, 維護這樣乙個建立類總比維護 n 多相關物件的建立過程要簡單的多。
可以認為是工廠模式的變形,該模式顯得更加的專一;該模式的設計思路是乙個工廠只生產一種產品。也就是指定哪個產品在哪生產(死繫結),然後生產哪種產品就到對應的工廠生產。
工廠 產品
class factory抽象類
virtual fruit* createfruit() = 0;
protected:
std::string mname;
};class factory_1:public factory
virtual fruit* createfruit() };
class factory_2:public factory
virtual fruit* createfruit() };
class factory_3 :public factory
virtual fruit* createfruit() };
int main()
實際上, abstractfactory 模式是為建立一組( 有多類) 相關或依賴的物件提供建立介面, 而 factory 模式正如我在相應的文件中分析的是為一類物件提供建立介面或延遲物件的建立到子類中實現。並且可以看到, abstractfactory 模式通常都是使用factory模式實現(concretefactory1)。
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...
工廠模式 抽象工廠模式
子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...