策略模式
2009-12-14 21:40
155 查看
策略模式
定义:
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。
实例:
其实有很多模式可以在我们人身上得到原型。
那么,策略模式在哪里找呢?我们脸上。
人是一个超级复杂的对象。今天我先把我们脸的部分功能给实例化了。
因为他是我们最常用的,她有丰富的表情,而且她的嘴帮我们很多很多
的忙,不过也有很多是倒忙。
首先把我们的脸抽象化:
主体:脸
说一句话“谢谢你的关照!”
做一个表情“微笑”
行为合体说话:楼主微笑的说:“谢谢你的关照!”
直接设计编码:
很简单吧。
但是,突然楼主捡到1快钱,开心得哈哈大笑起来,然后说:送给你!
又该怎么办呢?
改代码,的确可以做到,但是楼主又变脸了,那又怎么办呢?
可想而知,这个设计有问题。
它对修改没有关闭。违反开-闭原则---对扩展开发,对修改关闭
下面再说几个OO原则:
一.封装变化
二.使用组合,少用继承
三.针对接口编程,不针对实现编程
那么我们用上面的三个原则来设计这个程序:
封装变化
变化的有什么呢?
1.楼主说的话。常常变的
2.楼主表情。喜怒无常
不变的有什么呢?
1.说话这个行为
2.对大家的感激之心:)
针对接口编程,不针对实现编程
既然有2个地方是常常变的,那抽象出2个接口吧!
使用组合,少用继承(“有一个”可能比“是一个”更好)
那就让脸有一个“说的话”,还有一个“表情”。
类图
这--就是策略模式了!
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。
本例子中的算法族(ThansWork GetWord GiveWord)(LittleSmile Cry YockSmile)
在封装后,用户就可以随意使用了。
public static void main(String [] arg){
Face face = new Face();
face.setWord(new GetWord());
face.setExpress(new Cry());
face.speak();
}
以上就是测试代码,
输出的不是--楼主微笑的说:谢谢你的关照!
而是--楼主哭着说:还我钱吧!
第一次写模式,如有意见,请及时反馈谢谢。
定义:
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。
实例:
其实有很多模式可以在我们人身上得到原型。
那么,策略模式在哪里找呢?我们脸上。
人是一个超级复杂的对象。今天我先把我们脸的部分功能给实例化了。
因为他是我们最常用的,她有丰富的表情,而且她的嘴帮我们很多很多
的忙,不过也有很多是倒忙。
首先把我们的脸抽象化:
主体:脸
说一句话“谢谢你的关照!”
做一个表情“微笑”
行为合体说话:楼主微笑的说:“谢谢你的关照!”
直接设计编码:
public class Face { private void wordThanks(){ //通过很艰难的途径,做了很多步骤才想出的一句话 System.out.println("说:谢谢你的关照!"); } private void expressSmile(){ //翻了一本表情字典才找到的表情,也很艰难 System.out.print("楼主微笑的"); } public void speak(){ expressSmile(); wordThanks(); } public static void main(String [] arg){ new Face().speak(); } }
很简单吧。
但是,突然楼主捡到1快钱,开心得哈哈大笑起来,然后说:送给你!
又该怎么办呢?
改代码,的确可以做到,但是楼主又变脸了,那又怎么办呢?
可想而知,这个设计有问题。
它对修改没有关闭。违反开-闭原则---对扩展开发,对修改关闭
下面再说几个OO原则:
一.封装变化
二.使用组合,少用继承
三.针对接口编程,不针对实现编程
那么我们用上面的三个原则来设计这个程序:
封装变化
变化的有什么呢?
1.楼主说的话。常常变的
2.楼主表情。喜怒无常
不变的有什么呢?
1.说话这个行为
2.对大家的感激之心:)
针对接口编程,不针对实现编程
既然有2个地方是常常变的,那抽象出2个接口吧!
使用组合,少用继承(“有一个”可能比“是一个”更好)
那就让脸有一个“说的话”,还有一个“表情”。
类图
这--就是策略模式了!
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。
本例子中的算法族(ThansWork GetWord GiveWord)(LittleSmile Cry YockSmile)
在封装后,用户就可以随意使用了。
public static void main(String [] arg){
Face face = new Face();
face.setWord(new GetWord());
face.setExpress(new Cry());
face.speak();
}
以上就是测试代码,
输出的不是--楼主微笑的说:谢谢你的关照!
而是--楼主哭着说:还我钱吧!
第一次写模式,如有意见,请及时反馈谢谢。
相关文章推荐
- java设计模式-策略模式
- 策略模式
- 策略模式
- HeadFirst设计模式之策略模式
- Java设计模式学习之一---策略模式
- 设计模式:简单工厂与策略模式
- 我读设计模式之策略模式(Strategy pattern)
- C++实现策略(Strategy)模式
- 设计模式-策略模式
- 工厂模式和策略模式的区别
- 重新认识策略模式---利用策略实现容错恢复机制
- 【设计模式】策略模式 (Strategy Pattern)
- 深入解析C++编程中对设计模式中的策略模式的运用
- 策略模式
- 简单的策略模式,类模版
- 第 1 章 策略模式【Strategy Pattern】
- 设计模式之策略模式(Strategy)
- Java设计模式透析之 —— 策略(Strategy)
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
- 【设计模式】策略模式(经过改进的)