设计模式-创建-Factory(工厂)模式
目的:统一对象创建接口,类的具体化延迟到子类
对象很多时,对象的创建就会很复杂 多样,
工厂模式规定了统一创建接口,提高内聚 ,解耦
定义创建对象的接口,封装了对象的创建;
使得具体化类的工作延迟到了子类中。
工厂模式有好几种形式
- 简单的静态接口函数,
class Product
{
public:
/**
* @brief create a Product
*/
static Product *create()
{
return new Product;
}
private:
Product(){}
};
2. 抽象工厂类创建1
class Product
{
public:
Product(){}
};
class Factory
{
public:
virtual Product * create() = 0;
};
class ProductFactory : public Factory
{
public:
virtual Product *create()override
{
return new Product;
}
};
int main(int argc, char *argv[])
{
Factory * factory = new ProductFactory;
Product* product = factory->create();
system("pause");
return 0;
}
//还可以进一步 对访问权限封装
3.模板工厂类创建
class Product
{
public:
void init(){ cout << __FUNCTION__ << endl; };
Product(){}
};
template< class T>
class Factory
{
public:
Factory(){};
virtual T *create();
};
template<>
class Factory<Product>
{
public:
Factory(){};
virtual Product *create()
{
auto ins = new Product;
ins->init();
return ins;
}
};
int main(int argc, char *argv[])
{
auto *factory = new Factory<Product>();
factory->create();
return 0;
}
//也可以用模板函数创建,各自的特化版本
4.抽象工厂创建2
class Fruit
{
public:
Fruit(){}
};
class Apple :public Fruit
{
public: Apple(){};
};
class Peach :public Fruit
{
public: Peach(){};
};
class Factory
{
public:
virtual Fruit *createApple() = 0;
virtual Fruit *createPeach() = 0;
};
class FruitFactory : public Factory
{
public:
Fruit *createApple()override
{
return new Apple;
}
Fruit *createPeach()override
{
return new Peach;
}
};
int main(int argc, char *argv[])
{
Factory * factory = new FruitFactory;
Fruit* apple = factory->createApple();
Fruit *peach = factory->createPeach();
system("pause");
return 0;
}