2019-11-12

参考大话数据结构

假设我们要解决一个问题:编程实现一个计算器
用面向过程的思想,很容易想到,首先输入两个操作数,再判断运算符进行运算,输出结果即可,但是这样的代码很难维护,我们需要使用面向对象的思想:
(1)将运算与显示分离,使用到了面向对象中封装的思想,用一个类来处理运算;
(2)如果说我们要添加一个新的运算,那么我们在修改代码时可以看到其它的几种运算,这样不是很好,我们将几种运算符放到各自的类中,这样我们在添加运算符的时候只要添加相应的类即可,但是我们如何知道我们要使用哪一个类呢?
(3)简单工厂模式:所谓工厂,就是用一个单独的类来创造实例,我们创建一个工厂类,在这个工厂类中根据用户输入的运算符创建实例即可,在该工厂类中需要进行判断来区分不同的运算符,如果说我们要添加一个新的运算,我们首先要添加该运算的类,其次也需要在工厂类中添加对该运算的判断,违背了我们的开放-封闭原则,怎么办呢?
(4)工厂方法模式:我们为所有的运算创建相应的工厂,如果说我们要添加一个新的运算,我们需要添加该运算的工厂类以及相应的运算类,其实这个就是客户端决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法模式把简单工厂模式的内部逻辑判断移到了客户端代码来进行,原来是要改工厂类,现在是修改客户端。
(5)抽象工厂模式:

简单工厂模式、工厂方法模式、抽象工厂模式相关推荐

  1. 工厂模式(简单工厂,工厂方法,抽象工厂)

    工厂顾名思义就是创建产品,工厂分为三种:简单工厂,工厂方法,抽象工厂.该模式用于封装和管理对象的创建,是一种创建型模式. 1)简单工厂 该模式通过向工厂传递类型来指定要创建的对象 提供一个方法,根据类 ...

  2. C++设计模式 | Factory工厂模式(简单工厂、工厂方法、抽象工厂)

    目录 简单工厂 工厂方法 抽象工厂 学习工厂模式需要有C++虚函数 纯虚函数等相关继承与多态知识 简单工厂 在简单工厂模式中,可以根据参数的不同返回不同的实例..简单工厂模式专门定义一个类来负责创建其 ...

  3. 【设计模式】Unity3D 简单工厂、工厂(方法)、抽象工厂模式

    创建型模式-工厂三兄弟 提示:个人学习总结,如有错误,敬请指正 文章目录 创建型模式---工厂三兄弟 一.简单工厂模式 1.简单工厂模式是什么? 2.UML图 3.实现方式 二.工厂(方法)模式 1. ...

  4. 工厂模式之简单工厂、工厂方法、抽象工厂分析对比

    工厂模式有三种分类,简单工厂(也叫静态工厂).工厂方法模式.抽象工厂 一.简单工厂 简单工厂通俗的说就是提供一个类,这个类中的某个方法根据入参的不同来创建并返回实现了同一个接口的不同具体子类(产品). ...

  5. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  6. C++工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式 前言 为什么要使用工厂模式 优点 缺点 简单工厂(Simple Factory) 代码 应用 不足 工厂方法(Factory Method) 代码 应用 不足 抽象工厂(Abstract F ...

  7. 设计模式:工厂方法与抽象工厂模式

    说明:这篇blog写的很好,有助于理解工厂方法与抽象工厂模式的联系与区别. 原文链接:http://blog.csdn.net/yzxz/article/details/4601152 抽象工厂模式与 ...

  8. 23招做项目——工厂模式:工厂方法和抽象工厂

    在网上的大多数资料里面,将工厂模式分为:简单工厂.工厂方法.抽象工厂,他们之间的联系(以电子厂为例)如下: 那么该文章首先讲解工厂模式是什么,为什么需要工厂模式,最后再对三种模式进行示例.该文章是23 ...

  9. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  10. java 抽象工厂工厂_Java设计模式之简单工厂、工厂方法和抽象工厂

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:456544752我们一起学Java! 在前面的学习中(参见前面的博客),我们学到了很 ...

最新文章

  1. 抛弃Python,我们为什么用Go编写机器学习架构?
  2. jsp中空格字符怎么写_驰骋职场多年,如何对付Excel中的空格字符?
  3. TensorFlow学习之——checkpoints
  4. java class private_Java class 中public、protected 、friendly、private的区别
  5. 饶毅教授对非升即走的思考
  6. Java转型,多态和契约设计
  7. wordpress 数据库详解
  8. Utility Lambda
  9. C语言之浅析网络包解析
  10. 软件工程之项目开发计划
  11. **一些常用的字体英文名**
  12. unbuntu下pytorch安装
  13. 蓝桥杯国赛10-JavaB-8-大胖子走迷宫
  14. 君澜2021第一季度新开业酒店数量居世界酒店集团排名第六
  15. 【DL】第11 章:文本深度学习
  16. 一个新开始——学习内容规划
  17. ATTCK红日靶场二
  18. python pandas快速上手教程,还不赶紧收藏一波
  19. 基于InChat的SpringBoot版本通讯聊天数据存储Demo,附带详细流程说明
  20. Dockerfile构建mysql镜像,并初始化数据库数据

热门文章

  1. 如何Super Vectorizer从Mac 上的图像中删除多余的颜色区域?
  2. 数字表达_神奇的数字英语表达一定会让你大吃一惊
  3. 1.6编程基础之一维数组_01与指定数字相同的数的个数
  4. 白鹭引擎定时器代码实例
  5. python fromhex_Python hexstring-list-str之间的转换方法
  6. STM32H743+CubeMX-使用ADC(16bit分辨率)模数转换器读取CPU的温度(串行方式)
  7. 爬get接口_网络字体反爬之起点中文小说
  8. Qt笔记-QProcess带管道符号运行及获取进程启动时间(Linux)
  9. Qt笔记-profile中基本配置(获取环境变量、设置生成路径、包含文件)
  10. C++笔记-ClassA a和ClassA a()的区别与联系