美文网首页
设计模式

设计模式

作者: yuzhiyi_宇 | 来源:发表于2019-02-16 15:25 被阅读0次

如果你想成为以为优秀的工程师,不管是从事 Android、前端、后台等方向,设计模式是必须要掌握的。

面向对象的好处

通过封装、继承、多态把程序的耦合度减低,用设计模式使得程序更加灵活,容易修改,并且易于复用。

设计模式六大原则

设计模式的六大原则:单一职责原则、开发封闭原则、里氏替换原则、依赖倒置原则、迪米特原则、接口隔离原则。

单一原则

单一原则:就一个类而言,应该仅有一个引起它变化的原因。通俗讲就是不要让一个类承担过多的职责。

开放封闭原则

开放封闭原则:类、模块、函数等应该是可以拓展的,但是不可修改。开放原则有两个含义:一个是对于拓展是开放,另一个是对于修改是封闭的。设计程序的时候,面对需求的改变要尽可能地保证相对稳定,尽量通过扩展的方式来实现变化,而不是通过修改原有的代码来实现。

里氏替换原则

里氏替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。在软件中将一个基类对象替换成其子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。里氏替换原则是实现开放封闭原则的重要方式之一。由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。使用里氏替换原则注意点:

  • 子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。根据里氏替换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义。如果一个方法只存在子类中,在父类中不提供响应的声明,则无法在以父类定义的对象中使用该方法。
  • 在运用里氏替换原则时,尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法。运行时,子类实例替换父类实例,可以很方便扩张系统的功能,同时无须修改原有子类的方法;增加新的功能可以通过增加一个新的子类来先实现。里氏替换原则是开发封闭原则的具体实现手段之一。

依赖倒置原则

依赖倒置原则:高层模块不应该依赖底层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节该依赖于抽象。
Java 中,抽象指接口或抽象类,两者都是不能直接被实例化;细节就是实现类,实现接口或者继承抽象类而产生的就是细节,也就是可以加上一个关键字 new 产生的对象。高层模块就是调用端,底层模块就是具体实现类。依赖倒置原则在 Java 中的表现就是,模块间的依赖通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者抽象类产生的。如果类与类直接依赖细节,那么就会直接耦合。

迪米特原则

迪米特原则:一个软件实体应尽可能少地与其他实体发生互相作用。
也被称为最少知识原则。如果一个系统符合迪米特原则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块。迪米特原则要求我们在设计系统时,应该尽量减少对象之间的交互。如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用。如果其中的一个对象需要调用另一个对象的某一个方法,则可以通过第三者转发这个调用。简而言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。将迪米特原则运用到系统设计中,要注意以下几点:

  • 在类的划分上,应当尽量创建松耦合的类。类之间的耦合度越低,就越有利于复用。一个处在松耦合中的类一旦被修改,则不会对关联的类造成太大波及。
  • 在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限。
  • 在对其他类的引用上,一个对象对其他对象的引用应当降到最低。

接口隔离原则

接口隔离原则:一个类对另一类的依赖应该建立在最小的接口上。
奖励单一接口,不要创建庞大臃肿的接口;尽量细化接口,接口中的方法尽量少。也就是说,要为各个类建立专门的接口,不要视图建立一个很庞大的接口供所有依赖它的类调用。使用接口隔离原则对接口进行约束时,注意点:

  • 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计的灵活性;但是如果过小,则会造成接口数量过多,使设计复杂化。所以,要适度。
  • 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
  • 提高内聚,减少对外交互,接口方法尽量少用 public 修饰。接口是对外的承诺,承诺越少对系统的开发越有利,变更风险也会越少。

设计模式分类

GOF 提出的设计模式总共有 23 种,根据目的准则分类,分为三大类。

  • 创建型设计模式(5种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
  • 结构型设计模式(7种):适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 行为型设计模式(11种):策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、中介者模式、解释器模式。

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

      本文链接:https://www.haomeiwen.com/subject/cadmeqtx.html