C++设计模式-工厂模式

工厂模式-对象创建模式

定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。----《设计模式》GOF

类图:
工厂模式类图

应用场景:

  1. 软件系统中,经常面临着创建对象的工作;
  2. 由于需求的变化,需要创建的对象的具体类型经常变化。

解决问题:

  1. 应对这种变化。
  2. 如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?

代码:

#include <iostream>
using namespace std;
/*
创建⼀一个⽔水果抽象类,供具体的⽔水果实现,和抽象⼯工⼚厂返回
*/
class Fruit
{
public: 
virtual void getName() = 0;
};
/*
创建⼀一个⼯工⼚厂抽象类,供具体的⽔水果⼯工⼚厂实现,并且返回抽象⽔水果类
*/
class AbstractFactory
{
public: virtual Fruit* createFruit() = 0;
};
class Apple :public Fruit
{
public: 
virtual void getName()
{
cout << "我是苹果" << endl;
}
};
class Banana: public Fruit
{
public: virtual void getName()
{
cout << "我是⾹香蕉" << endl;
}
};
//实现了抽象⼯工⼚厂,并且返回⼀一个抽象⽔水果指针

class AppleFactory :public AbstractFactory
{
public: 
virtual Fruit* createFruit()
{
return new Apple;
}
};
class BananaFactory : public AbstractFactory
{
public: 
virtual Fruit *createFruit()
{
return new Banana;
}
};
/*
此时,如果要想添加⼀一种鸭梨那么不需要再去修改其中任何⼀一个类,⽽而只需要实现⼀一个鸭梨⼯工⼚厂,和⼀一个鸭梨具体类
*/
class Pear : public Fruit
{
public: 
virtual void getName()
{
cout<<"我是鸭梨"<<endl;
}
};
class PearFactory : public AbstractFactory
{
public:
virtual Fruit* createFruit()
{
return new Pear;
}
};
int main(void)
{
/*
根据依赖倒转原则,是针对接⼝口的编程,那么,何为针对接⼝口?就是我们只需要使⽤用抽象⼯工⼚厂类的指针,和抽象⽔水果类的指针,通过多态的特性,就可以搞定完成具体类的业务。
*/
AbstractFactory* abFactory=NULL;
Fruit* fruit = NULL;
/*
抽象类指针,完成Apple业务
*/
abFactory = new AppleFactory;
fruit = abFactory-­‐>createFruit();
fruit-­‐>getName();
delete abFactory;
delete fruit;
/*抽象类指针,完成Banana业务*/
abFactory = new BananaFactory;
fruit = abFactory-­‐>createFruit();
fruit-­‐>getName();
delete abFactory;
delete fruit;
/*
抽象类指针,完成Banana业务
*/
abFactory = new PearFactory;
fruit = abFactory-­‐>createFruit();
fruit-­‐>getName();
delete abFactory;
delete fruit;
return 0;
}

小结:
工厂模式可以将对象创建进行隔离,使得对象创建时的紧耦合变成了根据需要创建的松耦合。但是这种工厂方法模式中的每个工厂只能够生产一个对象,这样可能会导致系统中存在大量的工厂类,势必会增加系统的开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值