构造对象一般用new,但是new后面必须是确定的类型,后续需求变了可能要改new这段代码,不稳定。工厂方法是将构造对象的类型交给函数使用者决定,不在函数中构造,而是通过接口传递。但也可以直接传递对象啊,为什么还要引入工厂来构造对象?
class Object
{
public:
virtual void foo() = 0;
virtual ~Object(){}
};
class Object_A:public Object
{
public:
virtual void foo() {
cout << "Object_A::foo" << endl;
}
};
class Object_B :public Object
{
public:
virtual void foo() {
cout << "Object_B::foo" << endl;
}
};
class ObjectFactory
{
public:
virtual Object* getObject() = 0;
virtual ~ObjectFactory() {}
};
class Object_A_Factory :public ObjectFactory
{
public:
virtual Object* getObject() {
return new Object_A;
}
};
class Object_B_Factory :public ObjectFactory
{
public:
virtual Object* getObject() {
return new Object_B;
}
};
void test03() {
auto bar = [](ObjectFactory* ObjectFactory) {
Object* ojb = ObjectFactory->getObject();
ojb->foo();
delete ojb;
};
Object_A_Factory a;
bar(&a);
Object_B_Factory b;
bar(&b);
}