策略和工厂模式(工厂、抽象工厂)

工厂模式是创建型的,策略模式是行为型的,就是说,工厂模式接收指令,创建出符合要求的具体实现对象,让对象进一步去生产产品,而策略模式接收的是已经创建好的对象,从而实现不同的行为。

策略模式和状态模式

策略模式和状态模式的类图很像,他们都能改变对象的行为,策略模式是封装一系列算法,使得他们之间可以相互替换,客户端知道所有的策略,并能通过setStrategy方法来选择要用哪个策略,而状态模式是通过状态转移来改变上下文组合的State对象,当状态发生变化时,改变它的行为呈现出来。另外策略模式中,客户端知道所有的策略类,而对于状态模式,客户端并不知道内部是如何变化的。

装饰者模式和代理模式

职责不同,装饰者模式是在一个对象上动态的添加方法,代理模式是控制对对象的访问,代理也能做功能的增强,装饰者更多考虑的是功能扩展。代理模式可以为它的客户隐藏对象的具体信息,此外,使用装饰者模式是把原始对象传进构造器,而代理模式是创建一个对象的实例。

装饰者模式和适配器模式

装饰者和适配器模式都是包装模式(Wrapper Pattern),装饰者也是一种特殊的代理模式。
image.png

工厂方法是模版方法的特殊实现

模版方法和策略模式的区别

策略模式是使得算法间可以相互替换且不影响应用层的使用,模版是针对一个算法流程,将具体实现不一样的具体实现步骤交给子类去实现。模版不改变算法流程,而策略模式可以改变算法流程。

适配器和装饰者模式

意图不一样,适配器是将一个类的接口转换成客户期望的接口,而装饰者是给被装饰者动态的增加职责,用于扩展功能。

适配器和外观模式

外观模式是定义一个新的接口,适配器是复用原有的接口;适配器使两个已有的接口协同工作,外观是提供更为方便的访问入口。

外观模式和适配器模式的区别

两者的差异不在于它们包装了几个类,而在于它们的意图,适配器是改变接口来符合客户的期望,外观的意图是提供给子系统一个简化的接口。外观模式可以提供多个外观,适配器也可以让多个不同的类来适配同一个接口。

  • 装饰者模式:不改变接口。加入责任
  • 适配器模式:将一个接口转换成另一个接口
  • 外观模式:让接口更简单,应用层不要和子系统进行交互

    代理模式和装饰者模式

    代理模式和装饰者模式很像,对于装饰者模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个接口,能够动态的增加行为;对于代理模式,代理类(proxy class)和真实处理的类(real class)都实现同一个接口,可以增强方法,不论我们使用哪种模式,都能自定义一些方法,这是相同的地方。
    不同之处在于:装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注在控制对对象的访问,代理类可以对它的客户隐藏具体信息,使用代理模式的时候,要创建对象的实例,而使用装饰器模式的时候,我们是将原始对象作为参数传递给装饰者构造器的。
    再简洁一点:

  • 代理模式强调控制,装饰者模式强调增强

  • 代理模式强调透明访问,装饰者模式强调自由构建