面向对象的设计模式

SOLID设计原则(面向对象)

说明 目的
单一职责 一个类或模块应该只有一个引起它变化的原因。 一个类或模块应该只有一个主要职责,这样可以使代码更加清晰、易于理解和维护。
开闭原则 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。 强调在添加新功能时不需要修改现有代码,只需通过扩展已有代码来实现。使系统更加稳定、灵活而且易于扩展。
里氏替换 子类型必须能够替换掉它们的父类型。 在使用继承时,子类应该能够完全替代父类的行为,而不会引发意料之外的错误或破坏系统的正确性。
接口隔离 客户端不应该依赖它不需要的接口。 将大而全的接口拆分为多个小而精确的接口,以避免强迫客户端实现它们不需要的方法一个类或模块应该只有一个主要职责,这样可以使代码更加清晰、易于理解和维护。
依赖倒置 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。 通过抽象来解耦高层和低层模块之间的依赖关系,提高代码的松耦合性和可测试性。

单一职责原则与接口隔离原则之间的异同

相似之处:

都是SOLID原则中的一部分,旨在帮助设计出高内聚、低耦合的代码。

都强调将一个类或接口的职责划分得更细致、更专注,以提高代码的可维护性、可扩展性和可重用性。

不同之处:

单一职责原则(SRP)关注于类或模块的职责划分,强调一个类或模块应该只有一个引起它变化的原因。它要求一个类或模块应该只有一个主要职责,这样可以使代码更加清晰、易于理解和维护。SRP强调的是类或模块内部的职责划分。

接口隔离原则(ISP)关注于接口的职责划分,强调客户端不应该依赖它不需要的接口。它要求将大而全的接口拆分为多个小而精确的接口,以避免强迫客户端实现它们不需要的方法。ISP强调的是接口之间的职责划分。

总结: 单一职责原则和接口隔离原则是两个不同的设计原则,它们各自关注的方面略有差异。SRP关注类或模块内部的职责划分,提倡一个类或模块只有一个主要职责。ISP关注接口的职责划分,强调将大接口拆分为小接口,避免客户端依赖不需要的方法。虽然它们有相似之处,但它们在不同的层面上帮助我们设计出更好的代码结构。同时,遵循这两个原则可以提高代码的可维护性、可扩展性和可重用性。

设计模式

  • 创建型模式(Creational Patterns):包括单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)等。

  • 结构型模式(Structural Patterns):包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)和代理模式(Proxy)等。

  • 行为型模式(Behavioral Patterns):包括观察者模式(Observer)、迭代器模式(Iterator)、策略模式(Strategy)、命令模式(Command)和模板方法模式(Template Method)等。

外观模式 建造者模式 和 模板方法模式之间的异同

相似之处:

都属于GOF设计模式中的创建型模式。

都提供了一种将创建过程进行抽象和封装的方法,以便于简化代码和提高可维护性。

都关注对象的创建和初始化过程,以及如何组织和管理对象的结构。

不同之处:

目的和使用场景不同:

    外观模式(Facade Pattern)的目的是为了提供一个统一的接口,隐藏系统的复杂性,简化客户端与子系统之间的交互。它主要用于简化接口调用,提供一个高层次的接口,方便客户端使用。

    建造者模式(Builder Pattern)的目的是将一个复杂对象的构建过程和表示分离,使得同样的构建过程可以创建不同的表示。它主要用于创建复杂对象,将对象的创建步骤进行组合,以便于灵活构建不同的对象。

    模板方法模式(Template Method Pattern)的目的是定义一个算法的骨架,将一些步骤延迟到子类实现。它主要用于定义算法的框架,将变化的部分交给子类实现。

参与角色和关系不同:

    外观模式中,外观类(Facade)提供了一个统一的接口,客户端通过调用外观类来访问子系统的功能。

    建造者模式中,建造者类(Builder)负责创建产品的各个部分,并提供获取最终产品的方法,指导者类(Director)负责调用建造者的方法来创建产品。

    模板方法模式中,抽象类(AbstractClass)定义一个模板方法,该方法包含了算法的骨架,还可以包含一些具体方法和钩子方法,具体的子类(ConcreteClass)实现这些具体方法和钩子方法。

关注点不同:

    外观模式关注于简化接口调用,提供一个高层次的接口,隐藏系统的复杂性。

    建造者模式关注于创建复杂对象,将对象的构建过程和表示分离,以便于灵活构建不同的对象。

    模板方法模式关注于定义算法的框架,将变化的部分交给子类实现,保持算法的结构稳定。

总结: 外观模式、建造者模式和模板方法模式都是通过封装和抽象来简化对象的创建和使用。它们各自关注于不同的方面,解决不同的问题,并在不同的场景中有不同的应用。适用于不同的情况下选择合适的设计模式可以提高代码的可维护性和可扩展性。

posted @ 2023-07-27 14:13  武平宁  阅读(23)  评论(0)    收藏  举报