首页 > 其他 > 详细

工厂方法模式(Factory method pattern)

时间:2015-07-04 19:47:49      阅读:188      评论:0      收藏:0      [点我收藏+]

工厂方法模式(Factory method pattern)

flyfish 2015-7-4

工厂方法模式正式定义 - 引用《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无关

版权声明:本文为博主原创文章,未经博主允许不得转载。

工厂方法模式(Factory method pattern)

原文:http://blog.csdn.net/flyfish1986/article/details/46757005

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!