这里设计了一个有关足球的场景,在进攻当中暂分为传球和射门两个动作。
最开始你可能会这样想,设计一个抽象类(Attact),传球和射门分别定义好,子类会有一些他们个性的东西。比如球员号码,教练名称等等。
后来你发现传球和射门可能会分好多种,传球可分为短传和长传,射门又分为巴蒂式射门和因扎吉式的抢点。这样就不能将他们都写在这个抽象类(Attact)中,比如有的队员就是一个工兵型的(像AC米兰的加图索)他不停的抢断传球,很少参与到射门当中来。这样再定义若干个子类来继承(Attact)就不能满足需求。
我们可以把诸如传球和射门等动作抽象出来。组合到该抽象类中,只需在其中调用具体的方法即可。
像这样来定义:(其中Passable和Shootable为行为接口)完整代码见附件strategy.zip
package strategy;
/**
* @author edison
* @date 2009-9-24
*/
public abstract class Attact {
Passable pass;
Shootable shoot;
public abstract void display();
public void ownPass(){
pass.action();
}
public void ownShoot(){
shoot.action();
}
public void setPass(Passable pass) {
this.pass = pass;
}
public void setShoot(Shootable shoot) {
this.shoot = shoot;
}
}
这里我们采用了策略模式,将传球和射门这一类动作定义为标准,封装起来,让他们之间可以互相的组合和替换,这样有效的使具体操作和实现分离。
上面一段话也可以这样说:
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
得到几个设计原则:
1.找到应用中可能变化之处,把它们独立初以来,不要和那些不需要变化的代码混在一起。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
类图:
- 大小: 109.9 KB
分享到:
相关推荐
【Java设计模式】(2)策略模式Strategy
2009-03-9 策略模式Strategy:当解决一个问题的途径(策略)有很多种的时候,每一种处理方式都可以做为一种处理策略,通过管理类来切换调用不同的策略。
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。...
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
使用Java实现不同排序算法的策略模式的代码。
主要介绍了PHP设计模式之 策略模式Strategy,结合实例形式详细分析了PHP基于对象行为型的策略模式Strategy具体原理、实现技巧与相关操作注意事项,需要的朋友可以参考下
走进设计模式之 策略模式(Strategy) 代码
设计模式C++学习之策略模式(Strategy)
策略模式思想简单实现,初学者可看看。 设计模式 策略模式 Strategy
设计模式 策略模式。金典模式之策略模式代码。
strategy策略模式源码 策略模式源码 策略模式源码 策略模式源码
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式...
这种设计模式比较常用,希望能够帮助到大家。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each ...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式
Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量框架都使用了它 策略模式 Strategy:java.util....
C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式
一个把数组导出为表格的算法,输入一个数组,导出一个表格,当用户想改变导出的表格时,便可以通过改变输出的算法改变输出的结果。如果输出的内容用以网页显示,则输出 <table><tr><td>Jack</td></tr><tr><td>Maya...