• 设计模式总论及原则


    1 设计模式的学习

    设计模式是不同场景下所提出比较好的解决方案,因此设计模式的学习最好是根据场景,而不是根据理论学习。

    2 设计模式的分类

    设计模式有很多种,其中有23种是其他设计模式的基础,把这23种进行分类如下图所示:

    创建型模式:抽象了对象实例化过程,用来帮助创建对象的实例。

    结构型模式:描述如何组合类和对象以获得更大的结构。

    行为型模式:描述算法和对象间职责的分配。

    3 设计模式与设计原则关系

    采用设计模式的目的:为了增强代码的复用性,增加可维护性。基于这些目的提出来一系列原则:单一职责原则、迪米特原则、开闭原则等。在这些原则的基础上进行代码实现,形成了各种设计模式,原则的提出是具有理想性的,在代码中只能是尽可能的满足这些原则

     4 开闭原则

     定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。实现思路:面向抽象编程,用抽象构建框架,用实现扩展细节。优点:提高软件的可复用、可维护性。具体实现:当需要对某一类添加功能时,采用写一个子类继承该类,然后在该子类上写需要添加的功能。

    5 依赖倒置原则

     定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象。实现思路:抽象不应该依赖细节,让细节依赖抽象。优点:减少类间的耦合性,提高可维护性,降低修改程序所造成的风险。高层模块:一般是指应用层有具体的业务逻辑,低层模块:实现业务所依赖的类。具体实现:可参考工厂模式中的植物大战僵尸例子,function相对三种植物为高层模块,main方法相对function类为高层模块。一开始为面向实现编程,function直接和三种对象关联,为了降低耦合创建了plant接口,为面向接口编程。在创建完简单工厂模式后,高层function模块便不是依赖低层的三个对象了而是依赖工厂类。

    6 单一职责原则

     定义:不要存在多于一个导致类变更的原因。实现思路:一个类、接口、方法只负责一项职责。优点:降低类的复杂度,提高类的可读性、可维护性,降低变更引起的风险。变更一定是存在的,当修改一个功能时,可以降低对其他功能的影响。

    7 接口隔离原则

     定义:用多个专门的接口,不使用单一的总接口,客户端不应该依赖它不需要的接口。实现思路:一个类对一个类(泛指的类接口也可叫做一个类)的依赖应该建立在最下的接口上;建立单一的接口,不要建立庞大臃肿的接口;尽量细化接口,每一个接口中的方法尽量少。优点:符合高内聚低耦合的设计思想。注意:要适度,不要过分的细化接口。适度原则使用与前面所有的原则比如抽象时也要适度,不要过分抽象,这样反而会令程序变得更加复杂。

    8 迪米特原则

     一个对象应该对其他对象保持最少的了解即类中尽量少用public变量方法。强调只和朋友交流不会陌生人说话,即引入的外部类越少越好。朋友:出现在成员变量,方法输入、输出参数中的类为朋友类,出现在方法体内部的类不是朋友类。优点:减少类的耦合。注意:同样要注意适度原则,否则会出现大量的中间类,导致程序变得复杂。

     9 里氏代换原则

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

    10 合成复用原则

    定义:尽量使用合成/聚合的方式,而不是使用继承。

    11 界面与接口

    在设计模式分析中界面不是传统的图形界面,可能是一个类或者多个类组成的部分;接口不仅仅指Java中传统的interface,也有可能是一个类,主要看这个类所扮演的角色。

    0

  • 相关阅读:
    1-素材库同步:将素材组的素材同步到oss
    MongoDB_2:mongodb高级聚合查询
    关于python:如果键存在,则删除字典项
    Kafka学习-分布式日志系统 / 消息队列
    摘要算法—md5简介
    mac使用pyenv安装和管理多个python版本
    如何mac电脑上查看安装了几个python?
    mac os-Homebrew的安装及使用
    第一次博客
    个人介绍
  • 原文地址:https://www.cnblogs.com/youngao/p/11142694.html
Copyright © 2020-2023  润新知