[设计模式]创建模式-抽象工厂(C++描述)

[设计模式]创建模式-抽象工厂(C++描述)

second60 20180425

1. 抽象工厂

在我理解,抽象工厂其实是工厂模式的升级版,不同之处是:工厂模式是对一类对象的创建,而抽象工厂是对多类对象的创建。

2. 抽象工厂和工厂模式的区别

工厂模版只是处理一类对象创建

抽象工厂能对多类对象的创建

3. 抽象工厂的类图

 

图中可以看出,相比升级版权的工厂模式,此模式多了,不同的抽象产品,工厂即可以创建AbstartProductA类的产品,也可以创建AbstarctProductB类的产品。

 

4 例子

某个交通工具生产厂商,即可以生产摩托车,也可以生产汽车。车有分低中高端区别。摩托车有低端A摩托,中端B摩托.汽车有低端A汽车,中端B汽车.低商厂品由厂商A提供,中端车由厂商B提供。

 

分析:

a) 这里分两个类型的产品,分别为:Moto, Car两个抽象类,MotoMotoA(低端),MotoB(中端),CarCarA(低端),CarB(中端)

b) 工厂分低中高级别,低端车由低端厂生产FactoryA,中端车由中端厂生产FactoryB,高端车由高端厂生产FactoryC

 

类汇总:

1. 工厂抽象类:CarFactory

2. 工厂实现类:CarFactoryA(低端),CarFactoryB(中端),CarFactoryC(高端),

3. 汽车抽象类:Car

4. 汽车实现类:CarA, CarB

5. 摩托抽象类:Moto

6. 摩托实现类:MotoA, MotoB

 

根据抽象工厂模式,代码如下:

// 汽车抽象类

class  Car{public: virtual ~Car()=0;};

//汽车实现类

class  CarA:public Car{};

class  CarB:public Car{};

class  CarC:public Car{}; // 新加高端车

 

// 摩托抽象类

class  Moto{public:virtual ~Moto()=0;};

//摩托现实类

class  MotoA:public Moto{};

class  MotoB:public Moto{};

class  MotoC:public Moto{}; // 新加高端车

 

//工厂抽象类

class  CarFactory{

public : virtual ~CarFactory()=0;

virtual Moto* createMoto() = 0;

virtual Car*  createCar() = 0;

};

// 低端工厂

class  CarFactoryA{

public : ~CarFactoryA(){};

Moto* createMoto(){return new MotoA();}

Car*  createCar(){return new CarA();}

};

// 中端工厂

class  CarFactoryB{

public : ~CarFactoryB(){};

Moto* createMoto(){return new MotoB();}

Car*  createCar(){return new CarB();}

};

// 高端工厂

class  CarFactoryC{

public : ~CarFactoryC(){};

Moto* createMoto(){return new MotoC();}

Car*  createCar(){return new CarC();}

};

 

5 分析

a) 支持多类产品:抽象工厂可以支持多个不同产品的创建,如上面:汽车,摩托两类

b) 扩展性好:如交通公司本来只生产低中端汽车和摩托,业务扩大后,生产高端汽车,只需添加高端工厂和高端车即可

再者,交通公司除了生产摩托和汽车外,又生产火车,飞机等,在抽象工厂类添加新交通公司,并在具体工厂生产,即可支持新类型产品。

c) 抽象工厂模式拥工厂模式的优点

 

6 总结

抽象工厂其实是工厂方法的升级版,区别是:工厂方法只处理一类产品,而抽象工厂可以处理多类产品。

 

工厂模式和抽象工厂都是很常用的创建设计模式,相同也包括了最基本的面象对象设计思想,把一类产品抽象化,然后通过继续来实现具体类,最后利用多态来实现不同产品的生产。

下一节,单例,为最最最常用的设计模式,值得关注。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值