dxzmpk

endless hard working

0%

Design-Patterns

介绍

创建者模式

单例模式
工厂模式
工厂中的具体实例化

结构型模式

外观模式
尽管解决方案很大,但是客户端仍然希望使用简化的界面与子系统进行交互。
外观不会增加更多功能,而外观只是充当子系统的入口点。

image-20201126144147502

适配器模式
一个系统的输出可能与另一系统的预期输入不一致。

image-20201126144207333组成模式
多态性

image-20201126144226796

代理模式
能够完成相同的任务,但是将请求委派给原始对象以实现它们。
推迟创建资源密集型对象,直到需要
远程系统的本地表示
保证安全性

image-20201126144235090装饰者模式
行为组合->新类,类的数目可能会过于多
一对一聚合。
堆栈聚合,顺序很重要!
使用时,我们需要继承抽象装饰器并使用具体装饰器类实现组件接口

image-20201126144258511

行为模式

模板方法模式

模板方法模式定义了一个操作中算法的执行结构,而将一些子类之间不同的行为延迟到子类中定义。

image-20201126144309874

职责链模式

将问题的解决者对象连接在一起。将request 传递下去。

但是,如果其中的一个解决者没有传递对象的话,就会产生问题。这里需要使用模板方法模式规定行为的发生顺序,至于每个解决者如何解决问题,延迟到子类中进行实现。

image-20201126144321678

状态模式

当系统处于不同的状态,对不同的行为需要做出不同的反应时,我们往往需要使用很多的if-else条件分支。而使用状态模式,通过维持当前上下文的一个状态,由状态对发生的行为进行处理,而具体的实现在状态子类的对应方法中。通过这种方式就可以简化代码。

image-20201126144350572

指令模式

指令模式将对象对另一个对象的方法调用封装为一个Command对象,这样就可以将方法的调用保存到队列中之后再规划执行。

中介者模式

通过中介者,将相互有联系的对象的交互逻辑限制在中介者中,从而让代码更加集中,减少对象之间的耦合,但是同样地,会降低内聚性,因此需要在二者之间做好平衡。

观察者模式

主要包含一个域、三个方法,方法分别为添加订阅者,删除订阅者,通知全部订阅者,通知是通过调用所有Observer的update方法实现的,因此所有的Observer类都要实现相同的接口。

MVC and Good/Bad Design

image-20201126144408610

Code smell:

  • Comments
  • long methods
  • not just getter and setter
  • long parameter is bad, introduce parameter objects
  • global variables which is also bad

Part2: code smells when you make changes to the code

  • 如果一开始没有做到seperation of concerns, 会导致最终的divergent change.
  • change to be localized
  • 如果两个类总是频繁地进行交流,他们可能本就属于一处。
  • message chains: makes code harder to test independly
  • Switch Statements:
  • Speculative Generality
  • Refused Bequest: 拒绝馈赠