文档章节

设计模式学习--抽象工厂模式

丿咖啡灬微凉
 丿咖啡灬微凉
发布于 2017/04/17 23:58
字数 624
阅读 5
收藏 0

  抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。



抽象工厂模式的优点与缺点

  优点:易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这样使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。

  缺点:增加一个具体的产品类的时候需要更改原有的类,破坏了开放-封闭原则。

#include <iostream>

using namespace std;

class List_7											//手机7系列
{
public:
	virtual void product(){};							//生产虚函数
	virtual void sell(){};								//销售虚函数
};

class VIVO_7 : public List_7							//vivo7手机类
{
public:
	void product()										//生产方法
	{
		cout<<"生产一部vivo x7"<<endl;
	}
	
	void sell()											//销售方法
	{
		cout<<"售出一部vivo x7"<<endl;
	}
};

class APPLE_7 : public List_7							//iPhone7系列
{
public:
	void product()										//生产方法
	{
		cout<<"生产一部iphone7"<<endl;
	}
	
	void sell()											//销售方法
	{
		cout<<"售出一部iPhone7"<<endl;
	}
};

class List_PLUS7										//手机7plus系列
{
public:
	virtual void product(){};							//生产虚函数
	virtual void sell(){};								//销售虚函数
};

class VIVO_PLUS7 : public List_PLUS7					//vivo7plus手机
{
public:
	void product()										//生产方法
	{
		cout<<"生产一部vivo x7 plus"<<endl;
	}
	
	void sell()											//销售方法
	{
		cout<<"售出一部vivo x7 plus"<<endl;
	}
};

class APPLE_PLUS7 : public List_PLUS7					//iPhone7plus手机
{
public:
	void product()										//生产方法
	{
		cout<<"生产一部iphone7 plus"<<endl;
	}
	
	void sell()											//销售方法
	{
		cout<<"售出一部iPhone7 plus"<<endl;
	}
};

class IFactory											//工厂类基类
{
public:
	virtual List_7* createList7(){};					//7系列手机工厂
	virtual List_PLUS7* createList7plus(){};			//7plus系列手机工厂
};

class VIVO_Factory : public IFactory					//vivo工厂
{
public:
	List_7* createList7()								//vivo7生产
	{	
		return (new VIVO_7);
	}
	
	List_PLUS7* createList7plus()						//vivo7plus生产
	{
		return (new VIVO_PLUS7);
	}
};

class APPLE_Factory : public IFactory					//iPhone工厂
{
public:
	List_7* createList7()								//iPhone7生产
	{
		return (new APPLE_7);
	}
	
	List_PLUS7* createList7plus()						//iPhone7plus生产
	{
		return (new APPLE_PLUS7);
	}
};

int main()
{
	IFactory* factory = new VIVO_Factory;				//工厂类基类指针指向vivo手机工厂
	List_7* vivix7 = factory->createList7();			//生产一部vivo7
	vivix7->product();
	vivix7->sell();
	
	cout<<endl;
	
	List_PLUS7* vivix7plus = factory->createList7plus();	//生产一部vivo7plus
	vivix7plus->product();
	vivix7plus->sell();
	
	cout<<endl;
	
	IFactory* apple_factory = new APPLE_Factory;		//工厂类基类指针指向vivo手机工厂
	List_7* APPLE7 = apple_factory->createList7();		//生产一部iphone7
	APPLE7->product();
	APPLE7->sell();
	
	cout<<endl;
	
	List_PLUS7* APPLE7PLUS = apple_factory->createList7plus();	//生产一部iphone7plus
	APPLE7PLUS->product();
	APPLE7PLUS->sell();
	
	return 0;
}

显示结果:


本文转载自:http://blog.csdn.net/hjf161105/article/details/61429844

丿咖啡灬微凉
粉丝 1
博文 70
码字总数 0
作品 0
私信 提问
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
Java经典设计模式-结构型模式-适配器模式(Adapter)

适配器模式 适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的...

Idea
2018/01/20
108
0
设计模式之抽象工厂模式(创建型)

模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 模式角色 抽象...

smileNicky
01/01
0
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
269
2
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
200
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部