在学习设计模式的时候发现状态模式与职责链模式特别的相似,当时没有能理解,现在回过头来看了看,查
了查资料,明白了一点,先把自己的理解写下来,在以后的学习继续深入学习
一、状态模式
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
类图
Context类就是用户当前定义的一个状态,而抽象状态类State就是用来解决特定状态的方法,其下有很
多的子类会针对用户定义的状态不同而选择不同的子类方法;可以说抽象类State是解决Context类的方法,
它的子类是针对不同的状态而分成的不同的方法(State类与其子类的关系可以理解为组合关系)
二、职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链
并沿着这条链传递该请求,直到有一个对象处理它为止
类图
Handler是一个接口类,其下的对象,用来处理用户的请求,他们会按照一定的顺序执行下去,直到有一
个对象可以处理为止
三、比较
单独从上边来看,两者几乎是没有区别的,那还分成两个模式干什么?事实上两者的区别还是挺大的
1.描述问题的角度不一样:状态模式是从用户的状态方面描述的;职责链模式是从管理者角度描述的,每
个对象处理问题的结果都为两种情况是或否
2.状态模式是类的不同状态的多种不同的反映;职责链模式是不同类对同一个问题的反映
3.状态模式的子类是从抽象类中分离出去的;职责链模式是针对一类问题的结构优化,在处理问题时森严
的等级关系
四、总结
这两个模式现在只是在理论上有了一点点理解,还需要在实践中亲自动手去做,在机房合作的时候要用到
这两个模式,加深对两者之间区别的联系
原文地址:http://blog.csdn.net/husen1314/article/details/44729837