聊聊设计模式——体系概述

设计模式是在软件开发中经常遇到的一些重复性问题的通用解决方案。它们是经过反复验证和实践的经验总结,可以帮助开发人员更有效地解决特定类型的问题,提高代码的可维护性、可扩展性和可重用性。设计模式并不是具体的算法或代码片段,而是一种高级抽象概念,用于解决特定类型的设计和架构问题。

设计模式的主要目标包括:

  1. 提高代码质量:设计模式提供了经过验证的最佳实践,可以帮助开发人员编写更具可读性、可维护性和可测试性的代码。

  2. 提高代码复用性:设计模式通过将问题领域的通用解决方案抽象出来,使得这些解决方案可以在不同的上下文中重复使用,从而减少了代码的冗余。

  3. 提高系统的可扩展性:设计模式将系统分解成更小的、可组合的部分,使得系统更容易扩展和修改,而不会影响到其他部分。

  4. 提高沟通和理解:设计模式提供了一种共享的词汇和架构,有助于团队成员之间更好地理解和沟通设计决策。

七个原则:

在面向对象的软件设计中,有一些重要的原则被广泛接受和应用,以确保设计的系统具有高内聚性、低耦合性、可维护性、可扩展性和可重用性。这些原则有时被称为设计原则或SOLID原则,其中SOLID是一个缩写,代表了五个基本原则,而还有两个其他常见的原则也是重要的。以下是这些设计原则的简要概述:

  1. 单一职责原则(Single Responsibility Principle - SRP): 单一职责原则要求一个类应该只有一个引起变化的原因,也就是说,一个类应该只有一个职责。这有助于保持类的简单性、可维护性和可理解性。

  2. 开放封闭原则(Open/Closed Principle - OCP): 开放封闭原则要求软件实体(类、模块、函数等)应该对扩展开放,但对修改封闭。这意味着当需要添加新功能时,应该通过扩展现有的代码,而不是修改已经存在的代码。

  3. 里氏替换原则(Liskov Substitution Principle - LSP): 里氏替换原则要求子类应该能够替换其父类而不会影响程序的正确性。换句话说,子类应该能够完全符合父类的行为规范。

  4. 接口隔离原则(Interface Segregation Principle - ISP): 接口隔离原则要求不应该强制客户端依赖于它们不使用的接口。一个类不应该强迫其客户端实现它们不需要的方法。

  5. 依赖倒置原则(Dependency Inversion Principle - DIP): 依赖倒置原则要求高层模块不应该依赖于低层模块,它们都应该依赖于抽象。同时,抽象不应该依赖于细节,细节应该依赖于抽象。

  6. 合成复用原则(Composition Over Inheritance - COI): 合成复用原则鼓励使用组合(composition)而不是继承来实现代码复用。这有助于减少类之间的耦合性,使系统更灵活、可维护和可扩展。

  7. 迪米特法则(Law of Demeter - LoD): 迪米特法则要求一个对象应该对其他对象有最少的了解,也就是说,一个对象不应该直接与太多其他对象交互。这有助于减少系统的耦合性,提高了模块的独立性和可维护性。

这些原则一起构成了面向对象设计的基础,有助于创建高质量、可维护和可扩展的软件系统。应用这些原则可以提高代码的质量,减少代码的脆弱性和复杂性,同时促进团队协作和代码重用。设计模式也通常与这些原则一起使用,以更好地满足特定设计和架构需求。

24个设计模式:

设计模式是在软件开发中用于解决常见问题的通用解决方案。经典的设计模式通常被分为三个主要类别:创建型模式、结构型模式和行为型模式。以下是24个经典的设计模式(其中简单工厂模式不属于GoF设计模式),按照它们的类别进行组织:

创建型模式(Creational Patterns)

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。

  2. 工厂方法模式(Factory Method Pattern):定义一个接口来创建对象,但让子类决定实例化哪个类。

  3. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建一组相关或依赖对象,而不需要指定它们的具体类。

  4. 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,以便可以使用相同的构建过程创建不同的表示。

  5. 原型模式(Prototype Pattern):通过克隆现有对象来创建新对象,以避免直接实例化。

  6. 简单工厂模式(Simple Factory Pattern):它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。

结构型模式(Structural Patterns)

  1. 适配器模式(Adapter Pattern):允许将一个类的接口转换成另一个接口,以便两者可以一起工作。

  2. 桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们可以独立地变化。

  3. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。

  4. 装饰者模式(Decorator Pattern):动态地给对象添加额外的职责,而不改变其类。

  5. 外观模式(Facade Pattern):提供一个高层次的接口,用于简化子系统的使用。

  6. 享元模式(Flyweight Pattern):共享对象以减少内存占用或提高性能。

  7. 代理模式(Proxy Pattern) :为另一个对象提供一个替身或占位符以控制对这个对象的访问。

行为型模式(Behavioral Patterns)

  1. 责任链模式(Chain of Responsibility Pattern):将请求沿着处理者链传递,直到有一个处理者能够处理请求。

  2. 命令模式(Command Pattern):将请求封装成一个对象,从而可以参数化客户端操作,将请求排队或记录请求日志。

  3. 解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释语言中的语句。

  4. 迭代器模式(Iterator Pattern):提供一种访问一个聚合对象中各个元素的方法,而不需要暴露该对象的内部表示。

  5. 中介者模式(Mediator Pattern):定义一个中介对象来封装一系列对象之间的交互,从而减少对象之间的直接耦合。

  6. 备忘录模式(Memento Pattern):捕获一个对象的内部状态,并在该对象之外保存这个状态,以后可以将对象恢复到原始状态。

  7. 观察者模式(Observer Pattern):定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。

  8. 状态模式(State Pattern):允许对象在其内部状态发生改变时改变其行为。

  9. 策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并使它们可以互换。

  10. 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤延迟到子类中实现。

  11. 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,可以让你在不改变各元素的类的前提下定义作用于这些元素的新操作。

关联关系:

知识体系图:(希望最后自己能熟练地画出所有相关uml)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elaine202391

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值