23种程序设计模式与7大设计原则

本文参考程序设计模式学习资料分享:

链接:https://pan.baidu.com/s/1naTCZDcvZYWBEPPlDaNyQQ?pwd=dk0a 
提取码:dk0a 
 

23种程序设计模式是指Gamma等人在《Design Patterns: Elements of reusable Object-Oriented Software》一书中提出的23种经典的面向对象程序设计模式,这些模式被分为三大类,包括创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)

其中,创建型模式包括单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype);结构型模式包括适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy);行为型模式包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、访问者模式(Visitor)。

23种程序设计模式是一种软件开发中常见的设计思想,它们都是经过长期实践验证的有效方法,可以帮助开发人员设计出高质量、易维护、可扩展和可重用的软件。下面是对23种程序设计模式的详细解释:

  1. 工厂模式(Factory Pattern) 工厂模式是一种用来创建对象的模式,它将对象的创建过程封装在一个工厂类中,客户端可以通过工厂类来创建对象而不需要知道对象的具体创建细节。

  2. 抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式是一种提供一种接口用于创建相关或依赖对象的模式,它与工厂模式的区别在于,抽象工厂模式可以创建多个产品对象。

  3. 单例模式(Singleton Pattern) 单例模式是一种保证一个类仅有一个实例,并提供一个访问它的全局访问点的模式。

  4. 建造者模式(Builder Pattern) 建造者模式是一种将一个复杂对象的构建与它的表示分离的模式,使得同样的构建过程可以创建不同的表示。

  5. 原型模式(Prototype Pattern) 原型模式是一种用于创建重复对象的模式,它通过复制已有的对象来创建新的对象

  6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口。

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

  8. 过滤器模式(Filter Pattern):使用不同标准来过滤一组对象,通过逻辑运算来解决复杂的查询。

  9. 组合模式(Composite Pattern):将对象组合成树形结构来表示“整体-部分”关系,使得客户以一致的方式处理单个对象和对象组合。

  10. 装饰器模式(Decorator Pattern):装饰器模式允许你通过将对象放入包装器类中来为原对象添加新的行为。装饰器模式的关键点在于,添加行为并不会影响其他对象。

  11. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。

  12. 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。

  13. 代理模式(Proxy Pattern):代理模式为另一个对象提供一个替代品或占位符以控制对它的访问。代理模式有助于控制对对象的访问,可以用于创建虚拟对象、限制访问权限等。

  14. 责任链模式(Chain of Responsibility Pattern):为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。

  15. 命令模式(Command Pattern):命令模式将请求封装为对象,从而使你可以将请求参数化、队列化或记录请求日志,以及支持可撤销操作。

  16. 解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子。

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

  18. 备忘录模式(Memento Pattern):该模式用于保存一个对象的状态,以便在以后可以恢复到先前的状态。它通过在不破坏封装性的前提下捕获和外部化对象的内部状态来实现这一点,从而使对象在后续操作中可以恢复到先前的状态。

  19. 解释器模式(Interpreter Pattern):该模式定义了一种语言,解释器将语言中的句子表示为抽象语法树,然后实现该语言中的语句。它通常用于对实际问题进行解释,例如编译器和正则表达式引擎。

  20. 调停者模式(Mediator Pattern):该模式通过封装对象之间的通信来减少对象之间的耦合性。它通过使用一个调解者来控制对象之间的通信,并使对象之间的交互更加简单和可扩展。

  21. 责任链模式:责任链模式是一种行为型模式,它为避免请求发送者与多个接收者耦合在一起,将请求的发送者和接收者解耦。在责任链模式中,多个接收者都有机会处理请求,但是具体由哪个接收者处理请求则根据条件判断来确定。责任链模式通常将请求处理的对象串成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

    门面模式:门面模式是一种结构型模式,它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式主要是为了简化接口,让客户端能够更加方便地使用这一子系统,而不需要了解底层的实现细节。

    策略模式:策略模式是一种行为型模式,它定义了一系列算法,将每个算法都封装起来,并使它们可以互换。策略模式使得算法可以独立于使用它的客户端而变化。在策略模式中,算法被封装在一个独立的类中,并且具有相同的接口,这样它们就可以被互相替换。客户端可以选择不同的算法来完成相同的任务,从而达到不同的效果。

    状态模式:状态模式是一种行为型模式,它允许对象在其内部状态发生改变时改变它的行为。状态模式把一个对象的状态和它的行为进行了分离,它将每一种状态都封装成一个类,而将对象的行为委托给当前的状态对象。在状态模式中,一个对象可以处于多个不同的状态,但是每个状态下的行为是不同的。状态模式使得状态的改变对于客户端来说是透明的,客户端并不需要关心对象的状态,只需要调用相应的方法就可以完成相应的操作。

七大程序设计原则:

  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. 迪米特法则(Law of Demeter,LoD) 一个对象应该对其他对象保持最少的了解。也就是说,一个对象不应该知道太多关于其他对象的信息,它只需要知道自己需要用到的信息即可。

  7. 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP) 尽量使用合成/聚合,尽量不要使用继承。也就是说,我们应该尽量使用对象组合的方式来复用代码,而不是通过继承来复用代码。这样可以避免因为继承带来的耦合问题。

猜你喜欢

转载自blog.csdn.net/qq_51533426/article/details/129672665