简单工厂:通过接口的方式,把实现和变化隔离

接口编程:是一种特殊的抽象类,是一个纯虚类。通常接口来定义类的外部,就相当于一份契约,其实就是根据外部应用

需要的功能,约定了实现类应该要实现的功能。

软件开发中永恒的主题是“变化”,接口的最重要的一个设计语义就是封装变化,也就是隔离变化(内部实现对外部是透

明的)。

从软件的整体结构上来看,只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更加灵活,具有更好的

扩展性和可维护性。

设计模式的重点是对象间的结构!!!

如下面的这一套代码:

#include <iostream>
#include <string>
using namespace std;class Api{
public:virtual void print(string data) = 0;
protected:Api(){}   //屏蔽构造函数,体现接口
};class Imple :public Api{
public:void print(string data){cout << "print in Imple: " << data << endl;}
};//测试用的客户端
int main(){Api *pApi = new Imple();pApi->print("运行");system("pause");return 0;
}

此程序的封装性;
因为简单工厂要求实现与变化分离;
而Api *pApi = new Imple();中客户已经知道你这里面有一个Imple了;
所以这不是简单工厂所要提现的

下面这个是简单工厂的思想:

#include <iostream>
#include <string>
using namespace std;class Api{
public:virtual void print(string data) = 0;
protected:Api(){}
}; class ImpleOne :public Api{
public:void print(string data){cout << "print in ImpleOne: " << data << endl;}
};class ImpleTwo :public Api{
public:void print(string data){cout << "print in ImpleTwo: " << data << endl;}
};//下面的这个是关键了啊,这个Factory具有承上启下的作用
class Factory{
public:static Api* createApi(int type){Api *pApi = nullptr;if (type == 1){pApi = new ImpleOne;}else if (type == 2){pApi = new ImpleTwo;}return pApi;}
};/*
使用
传入参数1,可以实现从数据库读入的功能,
传入参数2,可以实现从文本读入的功能
这就是更具接口的公约,实现做什么样的事情实现和变化隔离,但觉得参数2效率不行时,执行修改2里面的东西,这样就实现了分离
简单工厂:通过接口的方式,把实现和变化隔离
*/int main(){Api *pApi = Factory::createApi(1);    //感觉就是把2个new的工作放到了Factory里面pApi->print("简单工厂!");            //如何理解是不是把new放进去就是简单工厂system("pause");return 0;
}//实现了客户调用和implOne,implTwo的解耦合
//factory类实现了变化隔离

简单工厂的定义:
提供一个创建对象实例的功能,而无需关心其具体实现。被创建的类型可以是接口、抽象类,也可以是具体的类。

设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)相关推荐

  1. 设计模式之笔记--简单工厂模式(Simple Factory)

    简单工厂模式(Simple Factory) 类图 描述 简单工厂: 一个抽象产品类,可以派生多个具体产品类: 一个具体工厂类: 工厂只能创建一个具体产品. 应用场景 汽车接口 public inte ...

  2. 设计模式心得笔记--简单工厂

    说到简单工厂,就不得不说到switch,其实简单工厂的关键,是把分支从主类的流程中分离出去,单独变成一个一个分散的类,然后把switch放到主类的实例化中去,不同的分支从一开始就实例化了不同的对象,这 ...

  3. 设计模式学习笔记------简单工厂

    简单工厂 一.实例1 1 /** 2 * 定义接口 3 * @author abc 4 * 5 */ 6 public interface Api { 7 public void test1(); 8 ...

  4. C++工作笔记-简单工厂模式基础(用静态类传入函数指针,再进行调用)(仿大佬代码)

    代码如下: #include <iostream> using namespace std;typedef void(*LPFUNCTION)(int data); void regist ...

  5. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

  6. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  7. 设计模式(1):简单工厂模式(Simple Factory Pattern)

    1. 从一个简单的例子开始 在众多的设计原则中,有一条原则是这么说的:要针对接口编程,不要针对实现编程. 针对接口编程的话,可以使用不同的实现类来创建这个对象.比如需要一个List: List< ...

  8. 从王者荣耀看设计模式(四.简单工厂模式)

    从王者荣耀看设计模式(简单工厂模式) 一.简介 游戏开始前,玩家可从英雄池自由挑选将要出战的英雄 二.简单工厂模式 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫 ...

  9. JAVA设计模式笔记(简单工厂模式)

    有一个水果加工工厂,我们的需求是实现加工水果的功能.常见的做法是创建一个水果抽象类,写一个抽象的加工方法,然后创建具体的水果类去继承抽象类,再去实现抽象方法,最后客户端再去新建对象实例. public ...

最新文章

  1. Sql Injection 注入攻击
  2. 为什么python用不了中文_【TK例子】为什么不显示中文
  3. css : 使用浮动实现左右各放一个元素时很容易犯的错误
  4. 【Hibernate】hibernate主键生成策略与配置详解
  5. 结对编程-黄金点游戏
  6. Cisco设备做流量监控的方法
  7. java1.8--改进的接口
  8. 【Python】[02]初识Python
  9. WordPress WP Photo Album Plus插件‘wppa-tag’跨站脚本漏洞
  10. 三次iframe框架切换
  11. 【转】一个基于Ajax的通用(组合)查询(ASP.NET)
  12. Excel如何实现随机抽取
  13. 网络互联课程设计(校园网和企业网)
  14. 老虎证券开放api常用常量
  15. 用kodexplorer免费搭建一个协同办公平台
  16. CPU卡指令返回错误集
  17. java计算税率例子
  18. 《次第花开》学习笔记
  19. python获取当前日期_python获取当前的日期和时间
  20. 海外直播、聊天交友APP的开发及上架GooglePlay体验【Compose版】

热门文章

  1. ERP火了20年,“中台”仅用5年就消失了?
  2. 即时通讯软件线上系统维护工作总结
  3. 滋润万物的173dmba
  4. P8U8 最中听的话,不要做每件事都考虑太多。
  5. 今天的我坐下来的蜡笔小新
  6. 神话与谬误:争论C++前你应当知道什么
  7. C++程序员必需的修养
  8. 我看中国软件---人才篇
  9. 学习C/C++:伴随我成长的编程书!
  10. 前端开发 “性能”有多重要