面试必备之设计模式(一)

156 阅读3分钟

一. 代理模式和装饰器模式区别

  • 让别人帮助你做你并不关心的事情,叫代理模式。

  • 为让自己的能力增强,使得增强后的自己能够使用更多的方法,拓展在自己基础之上的功能的,叫装饰器模式

  • 装饰模式是以对客户端透明的方式扩展对象的功能,是继承方案的一个替代方案;代理模式则是给一个对象提供一个代理对象,并由代理对象来控制对原有对象的引用

  • 装饰模式是为装饰的对象增强功能;而代理模式对代理的对象施加控制,但不对对象本身的功能进行增强

二.设计模式的分类

1.创建型 这些设计模式可以帮助我们优雅地创建对象

2.结构型 帮助我们优雅地设计代码结构

3.行为型 模块之间行为的模式总结,帮助我们组织模块行为

4.技巧型

一些帮助我们优化代码的技巧

策略、状态与命令模式的区别

  • 策略模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换

  • 状态模式:状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

  • 命令模式:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能

  • 策略模式:策略模式关注的是算法替换的问题,用一个新的算法替换旧算法,或者提供多种算法由调用者选择,算法的自由替换是它实现的重点

  • 状态模式:状态模式策略模式很相似,也是将类的"状态"封装了起来,在执行动作时进行相应的替换,从而实现,类在不同状态下的同一动作显示出不同结果。它与策略模式的区别在于,这种转换是"自动","无意识"的。策略模式会控制对象使用什么策略,而状态模式会自动改变状态。状态模式内部维护一个状态,会随着public api的调用进行相应的状态转移。外界不需要知道状态及其变化情况。

  • 命令模式:命令模式则关注的是解耦问题,如何让请求者和执行者解耦是它首先需要解决的,解耦的要求就是把请求的内容封装为一个个命令,由接收者执行。由于封装成了命令,就同时可以对命令进行多种处理,例如通过统一的execute接口执行命令,或者将命令存储起来,后续做撤销或者恢复功能

设计模式大图

设计模式一览.jpg

参考资料

设计模式