设计模式相关介绍

设计模式使用原则主要包括以下几点:

  1. 单一职责原则:一个类只负责一项职责,即一个类应该只有一个职责,该职责由类的一个职责来定义。这样可以提高类的可维护性和可复用性。
  2. 开闭原则:软件实体应当对扩展开放对修改封闭。也就是说,软件的功能扩展应当通过增加新代码来实现,而不是通过修改已有的代码来实现。这样可以提高软件的可维护性和可复用性。
  3. 里氏替换原则:在软件中,如果一个类是基类的子类,那么该类应当能够替换其基类。这样可以保证软件的正确性和可靠性。
  4. 依赖倒置原则:高层模块不应该依赖于低层模块两者都应该依赖于抽象抽象不应该依赖于细节细节应该依赖于抽象。这样可以降低类之间的耦合度,提高软件的可维护性和可复用性。
  5. 接口隔离原则:客户端不应该依赖于它不使用的接口一个类对另一个类的依赖性应当是最小的。这样可以降低类之间的耦合度,提高软件的可维护性和可复用性。
  6. 迪米特原则:一个软件实体应当尽可能少地与其他实体发生相互作用。这样可以降低软件实体之间的耦合度,提高软件的可维护性和可复用性。
  7. 合成复用原则:尽量使用合成/聚合,而不是继承来实现软件的功能。这样可以提高软件的可维护性和可复用性。

OO设计原则:

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要的代码混在一起:把会变化的部分取出并封装起来,好让其他部分不会受到影响。这样的好处是代码变化引起的不经意后果变少,系统变得更有弹性。

 

针对接口编程,而不是针对实现编程:对象类的行为被放在分开的类中(行为类),此类专门提供某行为接口的实现,这样实体类对象就不再需要知道行为的实现细节。

 

多用组合,少用继承:使用组合可以将算法组封装成簇,更可以”在运行时动态地改变行为“。

 

为了交互对象之间的松耦合设计而努力:松耦合设计将对象之间的互相依赖性降到了最低,系统在应对变化时,具有更好的弹性。

 

类应该对扩展开放,对修改关闭:继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地扩展。

通过动态地组合对象,可以写新的代码添加新功能,而无需修改现有代码。既然没有改变代码,那么引进bug或产生意外副作用的机会就会大幅降低。

 

最少知识原则(得墨忒尔法则):减少对象之间的交互,只留下几个密友,和密友谈话:在系统设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。如果系统相互依赖,那么这个系统会变成一个易碎的系统。

 

好莱坞原则:不要调用我们,我们会调用你。

好莱坞原则可以给我们一种防止”腐败“的方法。在该原则之下,我们允许底层组件将自己挂接到系统上,但是高层组件会决定什么时候和怎样使用这些底层组件。

好莱坞原则与依赖倒置原则之间的关系:依赖倒置原则叫我们尽量避免使用具体类,而多使用抽象好莱坞原则是用在创建框架或者组件上的一种技巧,好让低层组件能够被挂钩进计算中,而且不会让高层组件依赖低层组件,两者的目标都在于解耦,但是依赖倒置原则更加注重于如何在设计中避免依赖。好莱坞原则教我们一个技巧,创建一个有弹性的设计,允许低层结构能够互相操作,而又防止其它类太过依赖它们。

 

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

把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,让聚合更专注在它所应该关注的事情上面。迭代器模式将聚合对象的遍历提取出来,减少了聚合对象的职责。

 

单一职责原则:一个类应该只有一个引起变化的原因。

当一个模块或一个类被设计成只支持一组相关的功能时,我们说它具有高内聚。内聚是一个比单一职责原则更普遍的概念,但两者关系非常密切。遵守单一职责的类越多,这个系统的聚合度就越高,越容易维护。

 

单件模式确保只有一个实例,并提供全局访问点。

命令模式将”请求“封装成对象,以便使用不同的请求、队列、或者日志来参数化其他对象。命令模式也可支持可撤销的操作。

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。

责任链模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。

 

模板方法模式是一种行为型设计模式,它定义了一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。这种模式属于类行为型模式,利用继承实现。

模板方法模式的主要优点如下:

  1. 封装不变部分,扩展可变部分:父类封装了具体流程以及实现部分不变行为,其它可变行为交由子类进行具体实现。
  2. 提取公共代码,便于维护:部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

然而,模板方法模式也存在一些缺点:

  1. 类的个数增加:每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度。
  2. 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,增加了代码阅读的难度。
  3. 如果父类添加新的抽象方法,则所有子类都要改一遍。

 

策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式的核心思想将算法的具体实现和使用它的客户端代码分离,使客户端无需修改代码即可灵活地选择不同的算法

在策略模式中,通常定义一个接口或抽象类来表示某个算法然后创建实现该接口或继承抽象类的具体类来提供不同的算法实现。客户端代码可以通过使用这些具体类来选择适合的算法,从而完成不同的任务。策略模式通过将算法封装在独立的类中,使得它们易于理解、维护和扩展。

策略模式的优点包括:

  1. 算法可以自由切换:客户端可以根据需要选择不同的算法,只需更改配置或调用相应的方法即可。
  2. 避免使用多重条件(if-else):策略模式通过将算法封装在独立的类中,避免了使用多重条件语句进行算法选择的复杂性。
  3. 降低耦合度:策略模式将算法和使用它的客户端代码分离,降低了两者之间的耦合度,使得代码更加灵活和可维护。

然而,策略模式也存在一些缺点:

  1. 客户端必须知道所有的策略:客户端在选择算法时需要了解所有可用的策略,增加了使用策略模式的复杂度。
  2. 对象数目可观:如果备选策略很多,那么对象的数目也会很可观,这可能会导致性能问题和内存占用增加。

综上所述,策略模式是一种非常实用的设计模式,它通过将算法封装在独立的类中,使得算法可以自由切换、降低耦合度并提高代码的可维护性和可扩展性。

 

责任链模式是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在责任链模式中,每个对象都包含对下一个对象的引用,请求沿着这些引用的链传递,直到有对象处理它为止。

责任链模式的优点包括:

  1. 降低耦合度:责任链模式将请求的发送者和接收者解耦,请求者无需知道接收者的具体实现细节,只需要将请求发送到责任链上即可
  2. 增强系统的可扩展性:当需要增加新的请求处理类时,只需将其添加到链中,而无需修改已有的类符合开闭原则
  3. 增强给对象指派职责的灵活性:可以根据需要动态地改变链内的成员或调动它们的次序,也可动态地新增或删除责任。
  4. 责任分担:责任链模式允许将请求的处理者组织成一条链,并让请求沿着这条链传递,每个处理者都可以处理请求或将其传递给链上的下一个处理者,从而实现责任分担

然而,责任链模式也存在一些缺点:

  1. 可能会形成死循环:如果链中的某个处理者错误地调用了链中的下一个处理者,可能会导致请求在链中无限循环下去,形成一个死循环。
  2. 对链的构造和配置要求较高:责任链模式的实现需要对链的构造和配置有较高的要求,如果链的构造不合理或配置不当,可能会导致请求得不到正确处理或出现其他问题。
  3. 对性能有一定影响:由于请求在链中传递需要时间,因此对于大量请求的处理可能会影响性能。
posted @ 2024-01-30 15:34  小兵要进步  阅读(3)  评论(0编辑  收藏  举报