设计模式简介

设计模式(Design Pattern)


一、设计模式-由来

克里斯托弗·亚历山大 《建筑模式语言》

1994年 埃里希·伽玛、约翰·弗利赛德斯、拉尔夫·约翰、理查德·赫尔姆(四人组 Gang of four, Gof) 《设计模式:可复用面向对象软件元素》 23种

二、设计模式-目的

  • 可重用性(相同功能的代码,不用多次编写)
  • 可读性(编程规范,便于其他程序员的阅读和理解)
  • 可扩展性(当需要增加新功能时,非常方便,即:可维护)
  • 可靠性(增加新功能后,对原来的功能没有影响)
  • 使程序呈现高内聚、低耦合的特性

三、设计模式-六大原则

设计模式六大原则

基础原则:单一职责原则

类、方法、接口

对于一个类,只有一个引起该类变化的原因:该类的职责是唯一的,且这个职责是唯一引起其他类变化的原因

1.开闭原则(Open Close Principle)

对扩展开放,对修改关闭

  • 对于扩展是开放的:模块的行为是可以扩展的。当需求改变时,可以对模块进行扩展,使其具有满足改变的新行为。
  • 对于修改是关闭的:对模块的行为进行扩展时,不必改动模块的源代码或二进制代码。

示例: 更换飞书主题
开闭原则

2.里氏替换原则(Liskov Substitution Principle)

基类与子类之间的关系

任何基类可以出现的地方,子类一定可以出现。
里氏替换原则是对开闭原则的补充, 基类与子类的继承关系是抽象化的具体实现,实现开闭原则的关键步骤是抽象化,里氏替换原则是实现对象抽象化的具体步骤的规范。

示例: 正方形不是长方形
在这里插入图片描述

3.依赖倒置(倒转)原则(Dependence Inversion Principle)

依赖对象接口,而不是具体对象

针对接口编程,依赖于抽象而不依赖具体的实现。(降低了客户与实现模块间的耦合)
依赖倒置原则是开闭原则的基础

示例: 组装电脑
在这里插入图片描述

4.接口隔离原则(Interface Segregation Principle)

接口按照功能细分

客户端不应该依赖他不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。
实现方式:使用多个专门的接口比使用单一接口要好,可以降低类之间的耦合度。

5.迪米特法则(最少知道原则,Demeter Principle,LOD)

类与类之间的亲疏关系

一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象尽可能少的了解,只进行通信,不和陌生人说话。

6.合成复用原则(组合/聚合复用原则,Composite Reuse Principle)

类与类的关联关系

尽量使用对象组合/聚合关系(关联关系),而不是继承来达到复用的目的。

四、设计模式-分类

设计模式分类

1.创建型模式(Creation Patterns 5种)

提供创建对象的机制,增加已有代码的灵活性和可复用性

  • 抽象工厂模式(AbstractFactory):创建相关或依赖对象的家族,而无需明确指定具体类。
  • 工厂方法模式(FactoryMethod):定义一个创建对象的工厂接口,让子类决定实例化哪个类。
  • 单例模式(Singleton):某个类只能有一个实例,提供一个全局的访问点。
  • 建造者模式(Builder,创建者、生成器):封装一个复杂对象的创建过程,并可以按步骤构造。
  • 原型模式(Prototype):通过复制现有的实例来创建新的实例。

2.结构型模式(Structural Patterns 7种)

介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效

  • 适配器模式(Adapter Patterns):将一个类的方法接口转换成客户希望的另一个接口。
  • 桥接模式(Bridge Patterns):将抽象部分和它的实现部分分离,使他们都可以独立的变化。
  • 组合模式(Composite Patterns):将对象组合成树形结构以表示部分-整体的层次结构。
  • 装饰器模式(Decorator Patterns):动态的给对象添加新的功能。
  • 外观模式(Facade Patterns):对外提供一个统一的方法,来访问子系统中的一群接口。
  • 享元模式(Flyweight Patterns):通过共享技术有效的支持大量细粒度对象。
  • 代理模式(Proxy Patterns):为其他对象提供一个代理以便控制这个对象的访问。

3.行为型模式(Behavioral Patterns 11种)

负责对象间的高效沟通和职责委派

  • 责任链模式(Chain of Responsibility Patterns):将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求的机会。
  • 命令模式(Command Patterns):将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。
  • 解释器模式(Interpreter Patterns):给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  • 迭代器模式(Iterator Patterns):一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
  • 中介者模式(Mediator Patterns):用一个中介对象来封装一系列的对象交互。
  • 备忘录模式(Memento Patterns):在不破环封装的前提下,保持对象的内部状态。
  • 状态模式(State Patterns):允许一个对象在其对象内部状态改变时,改变它的行为。
  • 策略模式(Strategy Patterns):定义一系列算法,把他们封装起来,并且使他们可以相互替换。
  • 模板方法模式(Template Patterns):定义一个算法结构,而将一些步骤延迟到子类实现。
  • 观察者模式(Observer Patterns):对象间的一对多的依赖关系。
  • 访问者模式(Visitor Patterns):不改变数据结构的前提下,增加作用于一组对象元素的新功能。

五、设计模式-关系图

设计模式关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值