cpp学习抽象工厂模式;
在学习抽象工厂模式之前,先来回忆一下上一节学习的工厂方法模式;
工厂方法模式,采用多态分离的方法,将简单工厂模式的工厂类解放为多个具体的子工厂, 从而继承简单工厂模式的优点,解决简单工厂模式的缺点;
工厂方法模式的缺点:在增加一个新产品的时候,需要增加一个产品类和一个具体的 子工厂,给系统带来额外的开销;同时,每个工厂生产一种产品,太过单一;
而抽象工厂模式,其实相对于工厂方法模式来说,就多了一点东西,所谓多的一点东西就是将同一品牌的产品都交给同一个工厂去生产。解决工厂方法模式的单一性;否则,如果每一个产品都需要一个工厂去生产的话,会需要非常多的子工厂类,造成类泛滥;
同一品牌的产品交给同一个工厂来生产的意思就是:比如所,现在生产的需要不仅仅是单一的Hair电视机,还要有Hair空调,Hair冰箱等,这些同一品牌的产品都交给HairFactory来生产,而这些属于同一品牌的产品有一个专业名词:一个产品族;
同时,同一类产品需要有一个共同的抽象基类,来提供共有的方法,比如:Hair空调,TCL空调,它们的父类都是Base空调类;这样的同一类产品也有一个专业名词的归属:一个产品等级;
下面简单画个图来理解一下族和等级的具体含义:
抽象工厂模式定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式;
重点内容模式结构:
抽象工厂,具体工厂,抽象产品,具体产品;
其实在这几种模式一步一步学过来,你会发现每一种模式都是在上一层模式的基础上进行了一些扩展,进而成为一种新的模式;
下面我用C++模拟一下抽象工厂模式,同样的一个问题还是没有解决,那就是Java的反射机制还没有找到合适的替代方案;
code:
#include<iostream>
using namespace std;
class TV
{
public:
//纯虚函数,抽象基类,公共方法;
vir