工厂方法模式(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实例。
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