文章目录

  • 【关于设计模式】
    • 设计模式的诞生
    • 设计模式概念与解读
    • 设计模式的原则
  • 【关于工厂模式】
    • 简单工厂(静态工厂)模式的概念
    • 抽象工厂模式
    • 工厂模式的使用时机和注意事项
    • 给自己的思考

【关于设计模式】

设计模式的诞生

起源

与很多软件工程技术一样,模式起源于建筑领域,软件工程只有短短的几十年,与已经拥有几千年底蕴的建筑工程相比,后者有太多值得学习和借鉴的地方。哈佛大学的建筑学博士克里斯托弗.亚历山大,是建筑学领域的模式之父。他与其研究团队用了约20年的时间,对住宅和周边环境进行了大量的调查研究,发现人们对舒适住宅和城市环境存在一些共同的认同规律,将它们归纳成253个模式。对每一个模式都从前提条件、目标问题、 解决方案三个方面进行了描述,并给出了从需求分析到结构设计再到经典实例的过程模型。所以,对模式的定义可以抽象为在特定环境下,人们为了解决某类重复出现问题,而总结归纳出来的有效解决方案。

诞生

GoF将模式的概念引入软件工程领域,这标志着软件模式的诞生。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。软件模式主要由四部分构成,包括待解决问题、约束条件、解决方案、优点。软件模式与具体的应用领域无关,也就是说无论从事的是移动开发、桌面开发、Web开发还是嵌入式软件的开发,都可以使用软件模式。在软件模式中,设计模式是研究最为深入的分支,它融合了众多专家的设计经验,已经在成千上万的软件中得以应用。 1995年, GoF将收集和整理好的23种设计模式汇编成了一本名叫《设计模式》的书,该书的出版也标志着设计模式正式成为面向对象版软件工程的一个重要研究分支。

参考文章【设计模式】软件模式起源与诞生http://blog.csdn.net/xiada_you_comeon/article/details/50418000

关联

面向对象是自上而下的设计方式,就像建筑设计,需要先有一个设计思想和方案,然后划分功能区域,再具体按照功能区域分布每个房间,再具体到房间中的陈列、装修;而函数式编程是自下而上的设计方式,就像建筑结构,需要使用小的结构点进行组合、拼装来实现一个完整的框架体系

设计模式概念与解读

概念

设计模式(Design Pattern)是一套被反复使用、多数人知晓、经过分类的、代码设计经验的总结。使用目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。

解读

在做不同类型的建筑设计时,需要遵守的相关建筑规范。它是一套健全、系统、经过时间沉淀的并且合法的准则。目的就是可以让建筑设计人员通过以上标准,高效、准确地设计出相关的建筑部件,以便组装成最后的成品建筑物。当然,计算机中的设计模式,在这基础上有进行也好多细化:

分类

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式的原则

总原则:开闭原则(Open Close Principle)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。

1、单一职责原则
不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。

2、里氏替换原则(Liskov Substitution Principle)
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

3、依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

5、迪米特法则(最少知道原则)(Demeter Principle)
就是说:一个类对自己依赖的类知道的越少越好。也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。

最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。

6、合成复用原则(Composite Reuse Principle)
原则是尽量首先使用合成/聚合的方式,而不是使用继承。

【关于工厂模式】

简单工厂(静态工厂)模式的概念

概念

工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。

解读

简单来说,工厂模式是将实现同一事情的相同代码,放到一个函数中去,以后如果想再实现这个功能,都不需要重新编写这些代码了,只要执行当前的函数即可。

比如我们喝奶茶,如果世界上只有一个人想喝,那他自己做就好了,也不需要有奶茶店这种东西,但是随着想喝的人越来越多,制作奶茶的店也就慢慢开起来了。去买奶茶的人不需要知道制作过程,只需要关心我告诉店员的和他最后给我的是不是匹配的即可。

关系图

代码

 function Juice(temperature,sugar,feeding){var obj = {}obj.temperature = temperatureobj.sugar = sugarobj.feeding = feedingobj.make = function(){console.log('我要了一杯'+ this.temperature +',' + this.sugar + ','+ this.feeding +'的果汁')}return obj}let juice = Juice('热的','七分甜','加椰果')juice.make()

抽象工厂模式

概念

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂,即“工厂的工厂”。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

解读

这个模式归根到底可以认为是子类将父类的对象复制,然后在子类中实现,这样的好处是相同的东西放到父节点里,子节点里负责特异化并实现抽象的内容,就可以生产出一堆东西

问题:emenent-ui 是不是使用了抽象工厂模式的的思想?

关系图

模型




生动的小视频
(没法上传本地视频)
动画可以点进去看哦,在页面的中下部位~

代码

  function createAppleCake (){console.log('我生产了苹果味蛋糕')}function createBananaCake (){console.log('我生产了香蕉味蛋糕')}function createOrangeJuice (){console.log('我生产了橘子汁')}function createLemonJuice (){console.log('我生产了柠檬汁')}function getCake (name){this.Cake = function (name){console.log('我要生产蛋糕')if(name === null) {return null}if(name === 'apple') {return new createAppleCake()} else if (name === 'banana') {return new createBananaCake()}}}function getJuice (name){this.Juice = function (){console.log('我要生产果汁')if(name === null) {return null}if(name === 'orange') {return new createOrangeJuice()} else if (name === 'lemon') {return new createLemonJuice()}}}function FactoryProducer() {this.getFactory = function (type) {if(type === null) {return null}if(type === 'cake') {return new getCake()} else if (type === 'juice') {return new getJuice()}}}let producer = new FactoryProducer()let cakeFactory = producer.getFactory('cake')let cake = cakeFactory.Cake('apple')

工厂模式的使用时机和注意事项

使用时机

  • 对象的构建十分复杂

  • 需要依赖具体环境创建不同实例

  • 处理大量具有相同属性的小对象

注意事项

不滥用运用工厂模式,有时候仅仅只是给代码增加了不必要的复杂度,同时使得开发难以继续下去。

给自己的思考

1、建筑设计和程序设计的关联性

2、建筑设计中是否还有可以提炼与借鉴的方法或模式来提高程序开发的效率?

生物(biology)+化学( chemistry) = 生化(biochemistry)

建筑(architecture)+ 编程(program) = ?(archiprogram)

3、意识和模式之间的关系:是意识创造了模式,还是模式在引导意识?

如果后人的受制来源于前人意识创造出来的模式,那么后人的模式是不是也会被先人的模式所限制?所以面对问题的时候,是不是需要打破这种模式的禁锢?

4、程序设计如何反哺建筑设计

5、程序开发的艺术性

本人之前是学建筑设计的,后面转行做了前端开发,以上的思考也是我在查找资料的过程中产生的,如果有感兴趣的同学可以进一步讨论与交流~~(有问题还望指出,谢谢)

设计模式之——简单(静态)工厂模式和抽象工厂模式相关推荐

  1. C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...

    简单工厂模式 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespa ...

  2. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  3. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  4. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

  5. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  6. 深入理解设计模式-简单工厂模式vs工厂方法模式vs抽象工厂模式对比讲解

    文章目录 前言 一.简单工厂模式 1.描述 2.特点 3.优缺点 4.类图说明 二.工厂方法模式 1.描述 2.特点 3.适用场景 4.类图说明 5.简单工厂模式与工厂方法模式区别: 三.抽象工厂模式 ...

  7. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  8. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

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

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

最新文章

  1. Vue + Element UI——搜索框DEMO
  2. Spring 使用介绍(十二)—— Spring Task
  3. 【Android布局】控件布置
  4. java实现简单二叉树
  5. 机器学习基石作业一中的PLA和POCKET_PLA实现
  6. Docker学习七:使用docker搭建Hadoop集群
  7. bean validation校验方法参数_Spring Validation最佳实践及其实现原理,参数校验没那么简单!
  8. phoneGap技术分析
  9. HDOJ水题集合7:记忆化搜索
  10. Hibernate的单向N-N关联(四)
  11. 陕西省单招计算机应用考什么,陕西省对口单招计算机应用基础模拟试题四
  12. 教务系统的服务器管理,勤哲Excel服务器在学校教务管理中的应用
  13. 在这里,北上深成为“社科之城”
  14. 熊出没电锯机器人哪一集_熊出没伐木机器人第几集 熊出没光头强造伐木机器人是哪一集?...
  15. 移动通信网络规划:机房设计
  16. 学信网学位认证报告在哪
  17. 十大常见食物让牙齿越吃越白。
  18. 游戏开发学习路线图(2023最新版)建议收藏
  19. quartz(一)、quartz 数据库表
  20. 田野调查手记·浮山摩崖石刻(八)

热门文章

  1. 部署Neo4j +Rasa+Rasa UI
  2. 天气学诊断实习一 露点和凝结抬升高度的计算
  3. 操作系统相关问题——应用程序和操作系统怎么配合
  4. 节卡率先冲刺科创板,协作机器人商业化正当时
  5. 智能交通计算机学院,智能交通综合实训系统(FS_ITS)_华清远见研发中心
  6. [架构之路-143]-《软考-系统分析师》- 线索与脉络解读
  7. 推荐系统常用的推荐算法总结
  8. 短视频资源哪里可以找?有这些途径,再也不怕没素材
  9. js如何将最大值和最小值之间的数划分为五个添加进新数组
  10. Neuroaesthetics神经美学