zoukankan      html  css  js  c++  java
  • 设计模式--概述

    写在前边

    《庚子年记》 以前总是听说: 今年是经济形势最差的一年,各企业都准备过冬。没想到2020仅一个月就打败了最难过的2019。 笔者于2019年底裸辞,原计划2020春招再工作,怎耐遇上了武汉疫情。举国闭门谢客,当然也包括往日的金三银四。各大小企业纷纷缩减开支,立求生存下去,求职市场略显惨淡。值此之际,获得了难得的学习时间,想趁着自由的时光巩固下知识,打牢基本功。

    回首以前做过的项目,愈发频繁地觉得自己写的代码不够优雅,遂决定研读一下设计模式相关。在很多场景大家力求破,不破不立。但在软件上,个人觉得立更重要: 约定大于配置。要立规范,要遵守范式,要引入设计模式等。遂重新开始学习、总结。一是为日后自己回顾总结,二是供同样初入设计模式大门的程序员们参考学习。作者水平有限,文中若有错漏之处,还望不吝指出。

    设计原则

    1. 开闭原则

    开闭原则的意思是:对扩展开放,对修改关闭。程序应该通过扩展来实现变化,而不是通过修改已有代码来实现一个扩展和变化。简言之,是为了使程序的扩展性好,易于维护和升级。

    2. 里氏替换原则

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

    3. 依赖倒置原则

    1、高层模块不应该依赖低层模块,两者都应该依赖其抽象;

    2、抽象不应该依赖细节;

    3、细节应该依赖抽象。

    4. 接口隔离原则

    这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

    也就是仅仅需要提供客户端需要的接口,其实就是客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上,就比如说你有一个抽象类里面有很多接口,也就是说防止一个抽象类中汇总了很多的抽象方法,而要分开来其实就是一个接口的隔离。根据我们的需求去实现该实现的方法,不去实现其他方法,其实就是接口隔离原则。

    5. 迪米特法则

    又称最少知道原则。如果两个类不必彼此直接通讯,那么这两个类就不应该直接发生作用。这就要求我们在设计类的时候,尽量降低类的成员的访问权限。它的根本思想其实也是松耦合。

    6. 单一职责原则

    尽量使用对象组合,而不是继承来达到复用的目的。这样可以降低类与类之间的耦合度

    模式分类

    设计模式根据目的可以分为三大类,分别是创建型设计模式行为型设计模式以及结构型设计模式。 创建型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解藕。 行为型模式涉及到类和对象如何交互及分配职责。 结构型模式可以让你把类或对象组合到更大的结构中。

    创建型设计模式

    • 单例模式(Singleton)
    • 构建模式(Builder)
    • 原型模式(Prototype)
    • 抽象工厂模式(Abstract Factory)
    • 工厂方法模式(Factory Method)

    行为设计模式

    • 策略模式(Strategy)
    • 状态模式(State)
    • 责任链模式(Chain of Responsibility)
    • 解释器模式(Interpreter)
    • 命令模式(Command)
    • 观察者模式(Observer)
    • 备忘录模式(Memento)
    • 迭代器模式(Iterator)
    • 模板方法模式(Template Method)
    • 访问者模式(Visitor)
    • 中介者模式(Mediator)

    结构型设计模式

    • 装饰者模式(Decorator)
    • 代理模式(Proxy)
    • 组合模式(Composite)
    • 桥连接模式(Bridge)
    • 适配器模式(Adapter)
    • 享元模式(Flyweight)
    • 外观模式(Facade)

    公众号 【当我遇上你】

  • 相关阅读:
    内置函数大总结
    关于 global nonlocal 用法
    Python 基础数据类型相互转换
    Python 嵌套
    Python 基础关于编码
    「总结」 字符串总结
    「总结」 MLEAutoMaton的各种板子总结
    【洛谷4770】 [NOI2018]你的名字(SAM,线段树合并)
    【洛谷4070】 [SDOI2016]生成魔咒(SAM)
    【SP1811】 LCS
  • 原文地址:https://www.cnblogs.com/idea360/p/12363163.html
Copyright © 2011-2022 走看看