一些设计模式的比较

来源:互联网 发布:淘宝联盟登不上 编辑:程序博客网 时间:2024/05/16 19:29
设计模式的基本概念是比较容易懂的(见设计模式概括),但运用起来就比较复杂。尤其是,很多设计模式的UML图看上去长得差不多。这里对一些比较像的设计模式作对比,找出异同点。

策略模式与状态模式

可以通过环境类状态的个数来决定是使用策略模式还是状态模式。
策略模式的环境类自己选择一个具体策略类,具体策略类无须关心环境类;
而状态模式的环境类由于外在因素需要放进一个具体状态中,以便通过其方法实现状态的切换,因此环境类和状态类之间存在一种双向的关联关系。


策略模式和模板方法
模板方法模式在一个类中形式化地定义算法,而由它的子类实现细节的处理。 在子类定义详细的处理算法时不会改变算法的结构。在模板方法模式中,子类不显式调用父类的方法,而是通过覆盖父类的方法来实现某些具体的业务逻辑,父类控制对子类的调用。
策略模式是将算法封装起来,并让它们可以相互替换,整个算法都会改变。策略模式可以动态地让一个对象在许多行为中选择一种行为


策略模式与桥接模式
     Strategy和Implementor都可以理解为算法, 它们两者之间的不同点是使 用者(client)对这些算法的理解是不同的:对Strategy来说,这 些算法是Client 的一个组成部分,只是这部分功能基于设计的考虑被抽离出来,逻辑上看它们还是一个整体;而对bridge来说,client只是使用implementor实现的一些具体功能,implementor是作为辅助工具,功能类的角色出现,它们两个在逻辑上是分离的。
     在桥接模式中不仅Implementor具有变化(ConcreateImplementior),而且Abstraction也可以发生变化(RefinedAbstraction),而且两者的变化是完全独立的,RefinedAbstraction与ConcreateImplementior之间松散耦合,它们仅仅通过Abstraction与Implementor之间的关系联系起来。而在策略模式中,并不考虑Context的 变化,只有算法的可替代性。
     桥接模式强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高 层次的操作。而策略模式强调Strategy抽象接口的提供的是一种算法,一般是无状态、无数据的,而Context则 简单调用这些算法完成其操作

     最重要的是,策略模式强调的是一个维度的变化,而桥接模式强调的是两个维度的变化,并且这两个维度的变化互不干扰



模板方法与建造者模式
模板方法在父类定义一个算法骨架,将其步骤延迟到子类中。算法结构是稳定的,算法结构定义在父类中。
建造者模式则是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。即将产品某些部分的构造延迟到子类。其建造过程式稳定的。区建造过程由指挥者(Director)定义



命令模式与策略模式
策略模式强调的是算法之间的替换
命令模式强调的是请求的发送与接收
原创粉丝点击