• 模式的诞生与定义

  1. 模式(Pattern)起源于建筑业而非软件业(小本本记下来~~)
  2. 模式之父--美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士;
  3. 模式 :

    -Context(模式可适用的前提条件)
    -Theme或Problem(在特定条件下要解决的目标问题)
    -Solution(对目标问题求解过程中各种物理关系的记述)

  4. 模式是在特定环境下人们解决某类重复出现问题的一套成功有效的解决方案(简单来说就是为了减少工作量)。
  5. 程序设计的最大的特点:  变化   因为环境、设备、用户的需求等原因,  导致程序经常发生变化
  6. 基本结构
  7. 设计模式的定义:一套被反复使用的,多数人知晓的,经过分类遍目的、代码设计经验的总结,使用设计模式是为了可重复使用代码,让代码更容易被他人理解并且提高代码的可靠性(目的)。设计模式是一种对软件系统中不断重复出现的设计问题的解决方案进行文档化的技术,也是一种共享专家设计经验的技术。
  8. 基本要素 :模式名称(Pattern Name)、问题(Problem) 、解决方案(Solution)、效果(Consequences)
  • 设计模式的分类

  1. 根据目的(模式是用来做什么的):可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三类
  2. 根据范围,即模式主要是处理类之间的关系还是处理对象之间的关系,可分为类模式和对象模式两种:
    1. 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系
    2. 对象模式处理对象间的关系,这些关系在运行时变化,更具动态性
  • GoF设计模式

  1. 四人组(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”于1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。
  2. 创建型模式(关注对象的创建过程,对类的实例化过程进行抽象,描述如何将对象的创建和使用分离)
    抽象工厂模式(Abstract Factory) ★★★★★
    建造者模式(Builder) ★★☆☆☆
    工厂方法模式(Factory Method) ★★★★★(GoF 之外:简单工厂模式)
    原型模式(Prototype) ★★★☆☆
    单例模式(Singleton) ★★★★☆

  3. 结构型模式(关注如何将现有类或对象组织在一起形成更加强大的结构)
    适配器模式(Adapter) ★★★★☆
    桥接模式(Bridge)★★★☆☆
    组合模式(Composite) ★★★★☆
    装饰模式(Decorator) ★★★☆☆
    外观模式(Facade) ★★★★★
    享元模式(Flyweight) ★☆☆☆☆
    代理模式(Proxy) ★★★★☆

  4. 行为型模式(关注系统中对象间的交互,研究系统在运行时对象之间的相互通信与协作进一步明确对象的职责)
    职责链模式(Chain of Responsibility) ★★☆☆☆
    命令模式(Command) ★★★★☆
    解释器模式(Interpreter) ★☆☆☆☆
    迭代器模式(Iterator) ★★★★★
    中介者模式(Mediator) ★★☆☆☆
    备忘录模式(Memento) ★★☆☆☆
    观察者模式(Observer) ★★★★★
    状态模式(State) ★★★☆☆
    策略模式(Strategy) ★★★★☆
    模板方法模式(Template Method) ★★★☆☆
    访问者模式(Visitor) ★☆☆☆☆

  • 常用面向对象设计的原则

  1. 单一职责原则(Single Responsibility Principle, SRP)| ★★★★☆ : 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中 
    1. 另一种定义方式:就一个类而言,应该仅有一个引起它变化的原因。简单而言,就是一个类如果职责越多,那么它被复用的可能性就越低。即这个类中一个职责变化,可能会影响到其他的职责的运作。因此,单一职责原则就是实现高内聚,低耦合,将一个类的职责降低到最小,即类的数目很多,类中职责很少,因而类被复用的可能性被提高。
  2. 开闭原则(Open-Closed Principle,OCP) | ★★★★★ : 软件实体应当对扩展开放,对修改关闭
    1. 开闭原则是复用设计的第一块基石。在软件实体中应在尽量不修改原有代码的情况下进行扩展
  3. 里氏代换原则(Liskov Substitution Principle,LSP)| ★★★★★ : 所有引用基类的地方必须能透明地使用其子类的对象 
    1. 在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何的错误和异常,反之不成立。例如:我喜欢动物,那么我一定喜欢狗,因为狗是动物的子类,反之不成立
  4. 依赖倒转原则(Dependence Inversion Principle,DIP) |  ★★★★★ : 高层模块不应该依赖低层模块,它们应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象
    1. 要针对接口编程,不针对实现编程。一个具体类应当只实现接口或抽象类中声明过的方法,而不给出多余的方法,否在无调用到在子类中增加的新方法
  5. 接口隔离原则(Interface Segregation Principle,ISP)| ★★☆☆☆ : 客户端不应该依赖那些它不需要的接口 
    1. 当一个接口太大时,将它分割成一些更细小的接口,使用该接口的客户端只要知道与之相关的方法即可
  6. 合成复用原则(Composite Reuse Principle,CRP)| ★★★☆☆:优先使用对象组合,而不是继承来达到复用的目的
    1. 在一个新的对象里通过关联关系(包括组合和聚合关系)来使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用功能的目的
  7. 迪米特法则(Law of Demeter,LoD)| ★★★☆☆ : 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位 
    1. 又称最少知识原则,一个软件实体应尽可能少地与其他类发生相互作用
  • 设计模式的优点


  1.   融合了众多专家的经验,并以一种标准的形式供广大开发人员所用
  2.   提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂
  3.   让人们可以更加简单方便地复用成功的设计和体系结构
  4.   使得设计方案更加灵活,且易于修改
  5.   将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本
  6.   有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量
  • 设计模式的缺点

  1.   要说缺点的话,每一种都有它适用的地方和不适用之处,若使用不当,缺点往往会暴露的很明显。因此,学习到位,理解透彻,运用的多了,自然懂得如何扬长避短了,因而模式的缺点就尽可能的最小化了

设计模式(Design Patterns)的简单讲解的更多相关文章

  1. 云设计模式-Design patterns for microservices

    云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...

  2. Design Patterns (简单工厂模式)

    文章很长很精彩,如是初学请耐心观看.(大神请绕道!) 简单工厂模式: 1.创建型模式 2.简单工厂模式概述 3.简单工厂模式的结构与实现 4.简单工厂模式的应用实例 5.创建对象与使用对象 6.简单工 ...

  3. Java设计模式(Design Patterns In Java)读书摘要——第1章 绪论

    为何需要模式 模式是做事的方法,是实现目标,研磨技术的方法.通俗点说,模式是为了解决某个行业的某个问题的有效的方法或技艺. 为何需要设计模式 为了提升代码的水准,是代码变得简洁而易用.模式是一种思想, ...

  4. JAVA设计模式(DESIGN PATTERNS IN JAVA)读书摘要 第1部分接口型模式——第4章 外观(Facade)模式

    外观模式就类似于一个工具包,一个类对应一个功能. 外观模式的意图是为子系统提供一个接口,便于它的使用. 书中给出的例子是画一个哑弹的飞行路径, 初始的类的设计是这样的,看下图, ShowFlight类 ...

  5. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  6. 设计模式(Design Patterns)Java版

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. 设计模式(Design Patterns)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. Design Patterns in Smalltalk MVC 在Smalltalk的MVC设计模式

    Design Patterns in Smalltalk    MVC在Smalltalk的MVC设计模式 The Model/View/Controller (MVC) triad ofclasse ...

随机推荐

  1. flask完成文件上传功能

    在使用flask定义路由完成文件上传时,定义upload视图函数 from flask import Flask, render_template from werkzeug.utils import ...

  2. JS响应数据

    页面中展示的信息都是存储在服务器中的数据,离开数据的页面就像是一块画板的作用,如何通过数据来描述一个页面,又怎么映射数据变化和页面渲染的关系. 当然,最直接的方法就是操作节点,页面加载之后获取节点,再 ...

  3. Java结合SpringBoot拦截器实现简单的登录认证模块

    Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...

  4. 【ASP.NET Core】JSON Patch 使用简述

    JSON Patch 是啥玩意儿?不知道,直接翻译吧,就叫它“Json 补丁”吧.干吗用的呢?当然是用来修改 JSON 文档的了.那咋修改呢?比较常见有四大操作:AMRR. 咋解释呢? A—— Add ...

  5. Manjaro 安装后的配置

    1. 将本地数据包与远程数据包同步 sudo pacman -Syy 默认manjaro是没有同步数据包的,也就是说,这个时候你执行pacman -S pack_name 会报数据包找不到的错误(wa ...

  6. 微信小程序的初窥实践

    最近,小程序正式上线,各企业都纷纷开发,本博主看下其中奥秘, 首先得去微信公众平台(https://mp.weixin.qq.com/)注册一个小程序账号(以前注册过公众号的账号不可使用) 备注:注册 ...

  7. 升讯威微信营销系统开发实践:(4)源代码结构说明 与 安装部署说明( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  8. 数据库SQL语句中 查询选修了全部课程的学生的学号和姓名

    一.SQL语言查询选修了全部课程的学生的学号和姓名. 两种解决途径: 第一种: 我们可以表示为在SC表中某个学生选修的课程数等于C表中课程总数.相应的SQL语言如下: select S#,SNAME ...

  9. nginx与Apache的对比以及优缺点

    本文来自其他文章.如有好的问题,希望各位大神多多分享, 谢谢了..... 今天准备较详细的对比一下apache httpd与nginx两个web服务器的异同点.优缺点.由于我并不是做web开发的,所以 ...

  10. Reflection的getCallerClass静态方法

    Reflection的getCallerClass的使用 博客分类: java基础   Reflection的getCallerClass的使用:可以得到调用者的类.这个方法是很好用的. 0 和小于0 ...