工厂模式,实例化对象,用工厂方法取代new操作。

工厂模式基本与简单工厂模式差点儿相同,简单工厂中每次加入一个子类必须在工厂类中加入一个推断分支,这违背了开闭原则。而工厂模式的解决方法是将简单工厂中的每一个推断都生成一个工厂子类,工厂子类位于工厂类抽象和产品类实现之间,实际依旧属于实现。工厂类中的为抽象的接口,开闭原则要不改动接口,仅仅改动实现,则这里工厂子类是实现,加入工厂子类及其代码没有改动抽象的接口,即达到了开闭原则。

缺点是产品多了之后,要维护的量就添加了,会出现很多工厂子类,尽管工厂子类仅仅进行创建产品的工作。没添加一个产品就要添加一个工厂子类,添加工作量。

工厂模式仅仅是简单工厂的一点优化,使其遵循了开闭原则。应用场景也与简单工厂一样,在子类数量不多的情况下。

工厂模式的简单实现:

class bass{
public:
virtual void fun() = 0;
bass(){}
virtual ~bass(){} };
class A : public bass{
public:
virtual void fun(){cout<< "A"<<endl;}
A(){}
virtual ~A(){}
};
class B : public bass{
public:
virtual void fun(){cout<< "B"<<endl;}
B(){}
virtual ~B(){}
};
class AbstractFactory{
public:
AbstractFactory(){};
virtual ~AbstractFactory();
virtual bass* createProduct() = 0;
};
class FactoryA:public  AbstractFactory{
FactoryA(){}
~FactoryA(){}
A* createProduct(){return new A();}
};
class FactoryB:public  AbstractFactory{
public:
FactoryB(){}
~FactoryB(){}
B* createProduct(){return new B();}
};

最新文章

  1. .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
  2. 微信小程序-发起请求
  3. Web程序员常见的5个错误及解决方案
  4. linux卸载mysql,apache,php
  5. 获取Spring的上下文环境ApplicationContext的方式
  6. OK335xS psplash Screen 移植
  7. poj 1265 Area( pick 定理 )
  8. Js 返回页面 or 跳转页面
  9. JS 昵称,手机号,邮箱判断
  10. 希尔排序----java实现
  11. .NET防止重复提交数据
  12. 01-Python的介绍_Python编程之路
  13. MySQL存储过程 CASE语句
  14. Leetcode_两数相加_python
  15. python魔法函数之__getattr__与__getattribute__
  16. es6 初级之---const 和 默认参数
  17. LeetCode OJ 143. Reorder List(两种方法,快慢指针,堆栈)
  18. UI5-文档-4.8-Translatable Texts
  19. oracle 和 mysql 和区别
  20. C基础 time.h 简单思路扩展

热门文章

  1. wp8.1开发系列之安装包URI方案
  2. codeforces 245H . Queries for Number of Palindromes 区间dp
  3. hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)
  4. 服务器是R710常见错误汇总:
  5. 直接调用类成员函数地址(用汇编取类成员函数的地址,各VS版本还有所不同)
  6. linux系统CPU,内存,磁盘,网络流量监控脚本
  7. android之获取应用中的图片资源_获取找你妹中的图片资源
  8. Primefaces 中e.offset(...)问题的处理
  9. ios网络学习------8 xml格式数据的请求处理 用代码块封装
  10. c/c++测试程序运行时间