设计模式(Design Patterns)的简单讲解
- 模式的诞生与定义
- 模式(Pattern)起源于建筑业而非软件业(小本本记下来~~)
- 模式之父--美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士;
- 模式 :
-Context(模式可适用的前提条件)
-Theme或Problem(在特定条件下要解决的目标问题)
-Solution(对目标问题求解过程中各种物理关系的记述) - 模式是在特定环境下人们解决某类重复出现问题的一套成功有效的解决方案(简单来说就是为了减少工作量)。
- 程序设计的最大的特点: 变化 因为环境、设备、用户的需求等原因, 导致程序经常发生变化
- 基本结构
- 设计模式的定义:一套被反复使用的,多数人知晓的,经过分类遍目的、代码设计经验的总结,使用设计模式是为了可重复使用代码,让代码更容易被他人理解并且提高代码的可靠性(目的)。设计模式是一种对软件系统中不断重复出现的设计问题的解决方案进行文档化的技术,也是一种共享专家设计经验的技术。
- 基本要素 :模式名称(Pattern Name)、问题(Problem) 、解决方案(Solution)、效果(Consequences)
- 设计模式的分类
- 根据目的(模式是用来做什么的):可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三类
- 根据范围,即模式主要是处理类之间的关系还是处理对象之间的关系,可分为类模式和对象模式两种:
- 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系
- 对象模式处理对象间的关系,这些关系在运行时变化,更具动态性
- GoF设计模式
- “四人组(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”于1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。

创建型模式(关注对象的创建过程,对类的实例化过程进行抽象,描述如何将对象的创建和使用分离)
抽象工厂模式(Abstract Factory) ★★★★★
建造者模式(Builder) ★★☆☆☆
工厂方法模式(Factory Method) ★★★★★(GoF 之外:简单工厂模式)
原型模式(Prototype) ★★★☆☆
单例模式(Singleton) ★★★★☆结构型模式(关注如何将现有类或对象组织在一起形成更加强大的结构)
适配器模式(Adapter) ★★★★☆
桥接模式(Bridge)★★★☆☆
组合模式(Composite) ★★★★☆
装饰模式(Decorator) ★★★☆☆
外观模式(Facade) ★★★★★
享元模式(Flyweight) ★☆☆☆☆
代理模式(Proxy) ★★★★☆行为型模式(关注系统中对象间的交互,研究系统在运行时对象之间的相互通信与协作进一步明确对象的职责)
职责链模式(Chain of Responsibility) ★★☆☆☆
命令模式(Command) ★★★★☆
解释器模式(Interpreter) ★☆☆☆☆
迭代器模式(Iterator) ★★★★★
中介者模式(Mediator) ★★☆☆☆
备忘录模式(Memento) ★★☆☆☆
观察者模式(Observer) ★★★★★
状态模式(State) ★★★☆☆
策略模式(Strategy) ★★★★☆
模板方法模式(Template Method) ★★★☆☆
访问者模式(Visitor) ★☆☆☆☆
- 常用面向对象设计的原则
- 单一职责原则(Single Responsibility Principle, SRP)| ★★★★☆ : 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中
- 另一种定义方式:就一个类而言,应该仅有一个引起它变化的原因。简单而言,就是一个类如果职责越多,那么它被复用的可能性就越低。即这个类中一个职责变化,可能会影响到其他的职责的运作。因此,单一职责原则就是实现高内聚,低耦合,将一个类的职责降低到最小,即类的数目很多,类中职责很少,因而类被复用的可能性被提高。
- 开闭原则(Open-Closed Principle,OCP) | ★★★★★ : 软件实体应当对扩展开放,对修改关闭
- 开闭原则是复用设计的第一块基石。在软件实体中应在尽量不修改原有代码的情况下进行扩展
- 里氏代换原则(Liskov Substitution Principle,LSP)| ★★★★★ : 所有引用基类的地方必须能透明地使用其子类的对象
- 在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何的错误和异常,反之不成立。例如:我喜欢动物,那么我一定喜欢狗,因为狗是动物的子类,反之不成立
- 依赖倒转原则(Dependence Inversion Principle,DIP) | ★★★★★ : 高层模块不应该依赖低层模块,它们应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象
- 要针对接口编程,不针对实现编程。一个具体类应当只实现接口或抽象类中声明过的方法,而不给出多余的方法,否在无调用到在子类中增加的新方法
- 接口隔离原则(Interface Segregation Principle,ISP)| ★★☆☆☆ : 客户端不应该依赖那些它不需要的接口
- 当一个接口太大时,将它分割成一些更细小的接口,使用该接口的客户端只要知道与之相关的方法即可
- 合成复用原则(Composite Reuse Principle,CRP)| ★★★☆☆:优先使用对象组合,而不是继承来达到复用的目的
- 在一个新的对象里通过关联关系(包括组合和聚合关系)来使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用功能的目的
- 迪米特法则(Law of Demeter,LoD)| ★★★☆☆ : 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
- 又称最少知识原则,一个软件实体应尽可能少地与其他类发生相互作用
- 设计模式的优点
- 融合了众多专家的经验,并以一种标准的形式供广大开发人员所用
- 提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂
- 让人们可以更加简单方便地复用成功的设计和体系结构
- 使得设计方案更加灵活,且易于修改
- 将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本
- 有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量
- 设计模式的缺点
- 要说缺点的话,每一种都有它适用的地方和不适用之处,若使用不当,缺点往往会暴露的很明显。因此,学习到位,理解透彻,运用的多了,自然懂得如何扬长避短了,因而模式的缺点就尽可能的最小化了
设计模式(Design Patterns)的简单讲解的更多相关文章
- 云设计模式-Design patterns for microservices
云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...
- Design Patterns (简单工厂模式)
文章很长很精彩,如是初学请耐心观看.(大神请绕道!) 简单工厂模式: 1.创建型模式 2.简单工厂模式概述 3.简单工厂模式的结构与实现 4.简单工厂模式的应用实例 5.创建对象与使用对象 6.简单工 ...
- Java设计模式(Design Patterns In Java)读书摘要——第1章 绪论
为何需要模式 模式是做事的方法,是实现目标,研磨技术的方法.通俗点说,模式是为了解决某个行业的某个问题的有效的方法或技艺. 为何需要设计模式 为了提升代码的水准,是代码变得简洁而易用.模式是一种思想, ...
- JAVA设计模式(DESIGN PATTERNS IN JAVA)读书摘要 第1部分接口型模式——第4章 外观(Facade)模式
外观模式就类似于一个工具包,一个类对应一个功能. 外观模式的意图是为子系统提供一个接口,便于它的使用. 书中给出的例子是画一个哑弹的飞行路径, 初始的类的设计是这样的,看下图, ShowFlight类 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- 设计模式(Design Patterns)Java版
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
- 设计模式(Design Patterns)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Design Patterns in Smalltalk MVC 在Smalltalk的MVC设计模式
Design Patterns in Smalltalk MVC在Smalltalk的MVC设计模式 The Model/View/Controller (MVC) triad ofclasse ...
随机推荐
- 解决AES算法CBC模式加密字符串后再解密出现乱码问题
问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...
- java客户端调用webService
啥也不想说,以前使用的方法突然不行了.各种网搜(记得别忘记到jar包哦:axis.jar) 看代码,第一种方式,也就是以前的方式: 改方式不用表名参数名称 public static String i ...
- @EnableWebMVC注解理解
@EnableWebMVC注解用来开启Web MVC的配置支持.也就是写Spring MVC时的时候会用到.
- [python]多线程模块thread与threading
Python通过两个标准库(thread, threading)提供了对多线程的支持 thread模块 import time import thread def runner(arg): for i ...
- Python爬虫三年没入门,传授一下绝世神功,经理唏嘘不已!
长期枯燥的生活,敲代码的时间三天两头往吸烟室跑,被项目经理抓去训话. "入门"是学习Python最重要的阶段,虽然这个过程也许会非常缓慢.当你心里有一个目标时,那么你学习起来就不会 ...
- [codeforces 901E] Cyclic Cipher 循环卷积-Bluestein's Algorithm
题目大意: 传送门 给两个数列${B_i}.{C_i}$,长度均为$n$,且${B_i}$循环移位线性无关,即不存在一组系数${X_i}$使得对于所有的$k$均有$\sum_{i=0}^{n-1} X ...
- [POI2007]洪水pow bfs
发现:只在所有自己的城市建水泵一定是最优解. 所以对自己的城市按高度排序,该城市不用建的前提是从他出发经过一条高度都小于等于他的路径能到达一个已经修建水泵的 sort+bfs...... #inclu ...
- NOIP2013华容道 大爆搜
预处理出每个点周围四个点互相到达的最短路,再在整个图上跑SPFA,要记录路径 #include<cstdio> #include<cstring> #include<io ...
- BZOJ_2068_[Poi2004]SZP_树形DP
BZOJ_2068_[Poi2004]SZP_树形DP Description Byteotian 中央情报局 (BIA) 雇佣了许多特工. 他们每个人的工作就是监视另一名特工. Byteasar 国 ...
- STM32标准库GPIO操作
STM32标准库GPIO操作 STM32任何外围设备的使用都分为两部分:初始化和使用.体现在代码上就是:(1)有一个初始化函数(2)main函数中的使用 1.初始化GPIO 初始化GPIO函数代码: ...
