工厂方法模式(Factory method pattern)

来源:互联网 发布:淘宝如何设置自动发货 编辑:程序博客网 时间:2024/06/11 16:00

工厂方法模式(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无关

0 0
原创粉丝点击