设计模式:抽象工厂模式

设计模式:抽象工厂

  在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作,同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的创建对象的方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。

定义:提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。

  前两天看过工厂模式,其实工厂模式和抽象工厂模式本质是一样,都是通过创建工厂接口的形式对具体的类进行封装,只是抽象工厂是对一系列相互依赖的对象进行封装而已。
在这里插入图片描述
举个例子:

  假如我们要生产两种手机A和B,每种手机有对应的处理器,显示屏,摄像头等,我在设计架构的时候,每个手机都会对应这三个类,通过工厂模式我们知道,为了避免处理函数直接依赖具体的类,需要为每个类建立相应的工厂。但其实我们发现,每个手机的处理器,显示屏,摄像头是相互关联的,这就用到了抽象工厂,把手机A的三个类都封装在一起就可以了。

代码:

抽象基类:
//抽象基类
//处理器
class phone_cpu {

};
//显示屏
class phone_screen {

};
//摄像头
class phone_camera {

};
手机A和B的具体产品类:
/***********手机A**************/
//处理器
class A_cpu :public phone_cpu {

public:
	A_cpu() {
		cout << "手机A的处理器搞定~!" << endl;
	};
};

//显示器
class A_screen :public phone_screen {

public:
	A_screen() {
		cout << "手机A的显示器搞定~!" << endl;
	};
};

//摄像头
class A_camera :public phone_camera {

public:
	A_camera() {
		cout << "手机A的摄像头搞定~!" << endl;
	};
};

/***********手机B**************/
//处理器
class B_cpu :public phone_cpu{

public:
	B_cpu() {
		cout << "手机A的处理器搞定~!" << endl;
	};
};

//显示器
class B_screen :public phone_screen {

public:
	B_screen() {
		cout << "手机B的显示器搞定~!" << endl;
	};
};

//摄像头
class B_camera :public phone_camera {

public:
	B_camera() {
		cout << "手机B的摄像头搞定~!" << endl;
	};
};
抽象工厂:
class phoneFactory {
public:
	virtual phone_cpu* creatCpu() = 0;
	virtual phone_screen* creatscreen() = 0;
	virtual phone_camera* creatcamera() = 0;
};
具体工厂:
//具体工厂 phoneA
class A_phoneFactory :public phoneFactory{
public:
	virtual phone_cpu* creatCpu() {
		return new A_cpu;
	}
	virtual phone_screen* creatscreen() {
		return new A_screen;
	}
	virtual phone_camera* creatcamera() {
		return new A_camera;
	}
};
//具体工厂 phoneB
class B_phoneFactory :public phoneFactory {
public:
	virtual phone_cpu* creatCpu() {
		return new B_cpu;
	}
	virtual phone_screen* creatscreen() {
		return new B_screen;
	}
	virtual phone_camera* creatcamera() {
		return new B_camera;
	}
};

抽象工厂模式与工厂方法模式的区别

  • 抽象工厂模式是工厂方法模式的升级版,它用来创建一组相关或者相互依赖的对象。
  • 它与工厂方法模式的区别在于:工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品等级结构,表现为一个接口或抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
  • 在抽象工厂模式中,有一个产品族的概念,所谓产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成了一个产品族;而工厂方法提供的一系列产品称为一个等级结构。
  • 如果产品全部属于同一个等级结构(即同一个接口或抽象类),则属于工厂方法模式;如果产品来自多个等级结构(即多个不同的接口或抽象类),则属于抽象工厂模式。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值