【速览】设计模式(更新中)

一、背景

这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。这个问题非常关键,也就是说,你在学习一个技术的时候,需要知道这个技术的成因和目标,也就是这个技术的灵魂。如果不知道这些的话,那么你会看不懂这个技术的一些设计理念。

设计模式的背景可以追溯到1994年,当时四位作者(Erich Gamma, Richard Helm, Ralph Johnson 和 John Vlissides)出版了一本名为《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)的书。这本书通常被称为“四人帮”(Gang of Four,简称 GoF)的书,因为它是由这四位作者共同编写的。

在这本书中,作者们总结了他们在软件设计中遇到的各种问题,并提出了23种通用的解决方案,这些解决方案后来被称为设计模式。这些模式涵盖了从创建对象到管理对象之间交互的各个方面,为软件开发者提供了一套标准化的方法来解决常见的设计问题。

自 GoF 的书出版以来,设计模式已经成为软件工程领域的一个重要组成部分。随着软件开发技术的发展,新的设计模式不断被发现和提出,同时,一些现有的设计模式也在不断演化和改进。

此外,设计模式的概念也被扩展到其他编程范式和领域,如函数式编程、并发编程、分布式系统等。设计模式不仅限于面向对象编程,它们提供了一种通用的方法论,可以应用于各种不同的软件开发场景。

总之,设计模式的背景是基于对软件设计问题的深入理解和总结,它们提供了一套通用的解决方案,帮助开发者创建更加高效、可维护和可扩展的软件系统。

二、优缺点

这个技术的优势和劣势分别是什么,或者说,这个技术的 trade-off 是什么。任何技术都有其好坏,在解决一个问题的时候,也会带来新的问题。另外,一般来说,任何设计都有 trade-off(要什么和不要什么),所以,你要清楚这个技术的优势和劣势,以及带来的挑战。

优点

  • 提高代码复用性:
    设计模式提供了一套经过验证的解决方案,这些方案可以在不同的项目中重复使用,从而减少重复劳动,提高开发效率。

  • 增强代码的可维护性:
    设计模式有助于创建结构清晰、易于理解和修改的代码。这使得代码在长期维护和迭代过程中更加稳定和可靠。

  • 促进团队协作:
    设计模式提供了一套通用的术语和概念,这有助于团队成员之间的沟通和协作。开发者可以更快速地理解彼此的代码,并在此基础上进行工作。

  • 提升设计质量:
    设计模式鼓励使用面向对象的原则和最佳实践,如封装、继承、多态、单一职责原则、开闭原则等。这些原则有助于创建更加健壮和灵活的软件系统。

  • 解决常见问题:
    设计模式针对软件设计中的一些常见问题提供了具体的解决方案,如对象创建、对象组合、对象交互等。这些解决方案可以帮助开发者避免一些常见的设计陷阱。

缺点

  • 过度设计:
    设计模式有时可能导致过度设计,即在不需要的情况下过度使用设计模式,增加了代码的复杂性,而没有带来实际的好处。

  • 学习曲线:
    设计模式需要一定的学习和理解成本。对于新手开发者来说,理解和正确应用设计模式可能需要一段时间。

  • 代码复杂性:
    设计模式有时会增加代码的复杂性,特别是在小型项目或简单场景中,使用设计模式可能会使代码变得更加难以理解和维护。

  • 性能问题:
    某些设计模式(如代理模式、装饰器模式)可能会引入额外的间接层,这可能会对性能产生一定的影响,尤其是在性能敏感的应用中。

  • 过度抽象:
    设计模式鼓励抽象和封装,但在某些情况下,过度抽象可能会导致代码难以调试和测试,因为具体的实现细节被隐藏在抽象层之后。

三、适用场景

这个技术适用的场景。任何技术都有其适用的场景,离开了这个场景,这个技术可能会有很多槽点,所以学习技术不但要知道这个技术是什么,还要知道其适用的场景。没有任何一个技术是普适的。注意,所谓场景一般分别两个,一个是业务场景,一个是技术场景。

四、核心组成

技术的组成部分和关键点。这是技术的核心思想和核心组件了,也是这个技术的灵魂所在了。学习技术的核心部分是快速掌握的关键。

分为三大类:

  • 创建型模式 Creational Design Pattern 5’

在这里插入图片描述

  • 工厂方法模式 (Factory Method Design Pattern)

  • 抽象工厂模式 (Abstract Factory Method Design Pattern)

  • 单例模式 (Singleton Method Design Pattern)

  • 原型模式 (Prototype Method Design Pattern)

  • 建造者模式 (Builder Method Design Pattern)

  • 结构型模式 Structural Design Patterns 7’

在这里插入图片描述

  • 适配器模式 (Adapter Pattern)

  • 桥接模式(Bridge Pattern)

  • 组合模式(Composite Pattern)

  • 装饰器模式(Decorator Pattern)

  • 外观模式(Facade Pattern)

  • 代理模式(Proxy Pattern)

  • 享元模式(Flyweight Pattern)

  • 行为型模式 Behavioral Design Patterns 11’

在这里插入图片描述

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

五、底层原理

技术的底层原理和关键实现。任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其它技术的关键基础技术。所以,学习这些关键的基础底层技术,可以让你未来很快地掌握其它技术。

六、对比

已有的实现和它之间的对比。一般来说,任何一个技术都会有不同的实现,不同的实现都会有不同的侧重。学习不同的实现,可以让你得到不同的想法和思路,对于开阔思维,深入细节是非常重要的。

参考

https://www.geeksforgeeks.org/software-design-patterns/
https://refactoring.guru/design-patterns

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值