标签(空格分隔): 状态模式 策略模式 模板模式 面向接口
状态模式:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来改变了其类
状态模式是为了消除庞大的条件分支,将特定状态的行为放入一个对象中
状态模式主要是解决当一个控制对象状态转换的条件表达式过于复杂时的情况,将状态的判断逻辑转移到标识不同状态的一系列类中,将调用方的判断逻辑简化。
优点:1、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 2、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
-------------------------------------------------------------------------------------------------------------------------------
策略模式: 定义算法家族,分别包装起来,确保他们之间可以互相替换。
策略模式想要实现的是一个类的行为在其运行时可以改变
策略模式涉及到三个角色
环境角色(客户端):实际算法的调用者
抽象策略角色(接口):一个抽象角色,提供一个算法的入口
具体策略角色(接口的实现类):包装了具体的算法
优点:算法行为可以自由切换,而不对客户端造成影响,扩展性好。
面向接口
策略模式思想即是我们常说的面向接口编程,将算法的定义和实现分开,对于环境角色来说,只需要知道我需要调用的方法名是什么即可,内部具体的实现则与其无关。
-------------------------------------------------------------------------------------------------------------------------------
模板模式:如同模式的名称一样,定义一个操作中使用的算法的骨架,将一些独特的步骤衍生到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方式是通过将不变的行为搬移到超类中,去除子类中的重复代码
优点:1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
模板方式和策略模式的行为刚好相反:
策略模式是客户端调用的父类(或接口),具体的实现对于客户端而言是屏蔽的
模板模式则由客户端调用子类,客户端需要知道具体的细节