程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 工廠方法模式(Factory method pattern)

工廠方法模式(Factory method pattern)

編輯:C++入門知識

工廠方法模式(Factory method pattern)


工廠方法模式(Factory method pattern)

工廠方法模式正式定義 - 引用《HeadFirst 設計模式》

Define an interface for creating an object,but let subclasses decide
which class to instantiate.Factory Method lets a class defer
instantiation to subclasses.

定義了一個創建對象的接口,但是由子類決定要實例化的類是那一個,其中的工廠方法讓類把實例化推遲到子類

在下列情況下可以使用Factory Method模式:
-引用《設計模式 - 可復用面向對象軟件的基礎》
1. 當一個類不知道它所必須創建的對象的類的時候。
2. 當一個類希望由它的子類來指定它所創建的對象的時候。
3. 當類將創建對象的職責委托給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一信息局部化的時候。

參與者
1 Product
—定義工廠方法所創建的對象的接口。
2 ConcreteProduct
—實現Product接口。
3 Creator
—聲明工廠方法,該方法返回一個Product類型的對象。Creator也可以定義一個工廠方
法的缺省實現,它返回一個缺省的ConcreteProduct對象。
—可以調用工廠方法以創建一個Product對象。
4 ConcreteCreator
—重定義工廠方法以返回一個ConcreteProduct實例。

C++ 實現

class product
{
public:
    virtual void do() = 0;
};

class concrete_product_1 : public product
{
public:
    void do()
    {
        //關於產品1的處理
    }
};

class concrete_product_2 : public product
{
public:
    void do()
    {
        //關於產品2的處理
    }
};

class creator
{
public:
    virtual product *create_product() = 0;
};

class concrete_creator_1 : public creator
{
public:
    product *create_product()
    {
        return new concrete_product_1 ();
    }
};

class concrete_creator_2 : public creator
{
public:
    product *create_product()
    {
        return new concrete_product_2 ();
    }
};

    //使用

    creator *c1 = new concrete_creator_1 ();
    product *p1 = c1->create_product();
    p1->do();

    creator *c2 = new concrete_creator_2 ();
    product *p2 = c2->create_product();
    p2->do();

當增加產品3的時候,只要再concrete_creator_3和concrete_product_3就可以了,與產品1和產品2無關

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved