设计模式学习笔记——策略模式
策略模式
属于对象的行为模式,是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得他们之间可互相替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式是对算法的包装,把使用算法的责任和算法本身分离,委派给不同对象管理。
策略模式涉及到的角色:
环境角色Context:持有Strategy类的引用
抽象策略角色Strategy:抽象角色,由接口或抽象类实现,给出统一算法接口
具体策略角色ConcreteStrategy:具体的算法实现
搬运过来的类图一枚
从代码上来看策略模式相当简单,甚至可以免去解释,下面是各个类的实现
首先是抽象接口Strategy
Java代码
public interface Strategy {
public void strategyInterface();
}
接下来是具体策略类,这里实现2个,只是打印一句话
Java代码
public class ConcreteStrategy implements Strategy{
@Override
public void strategyInterface() {
System.out.println("first strategy");
}
}
public class ConcreteStrategy2 implements Strategy{
@Override
public void strategyInterface() {
System.out.println("second strategy");
}
}
再者是环境角色,持有一个策略类的引用
Java代码
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy=strategy;
}
public void contextInterface(){
strategy.strategyInterface();
}
}
最后来看策略模式达到的效果
Java代码
public class StrategyPattern {
public static void main(String[] args) {
Context context1=new Context(new ConcreteStrategy());
Context context2=new Context(new ConcreteStrategy2());
context1.contextInterface();
context2.contextInterface();
}
}
输出结果
first strategy
second strategy
上面的策略模式应该说是最最简单的,在书中还提到了策略模式在实现过程中需要注意的地方
1 具体策略角色有公共的行为或者属性 这个情况还是比较多的 此时应该将上面的Strategy从接口改为抽象类
2 策略模式在同一时间只能使用一个策略对象,但一个应用程序可能需要与多个策略相关联。也就是说,应用程序启动的时候,策略对象应该已经被创立,从而实现切换。
策略模式的使用时机:
1 系统中有许多类,而他们之间的区别只是行为
2 系统需要动态选择几种算法,则将算法包装起来
3 系统算法使用的数据不能让客户端知道
4 一个对象有多种行为,只能使用多重if...else语句实现
策略模式的优缺点
优点
1 提供了管理相关算法族的方法。适当使用继承可以把公共代码转移到父类,避免重复代码
2 策略模式提供了替换继承关系的办法。
3 避免了多重条件判断
缺点
1 客户端必须知道所有的策略类,并自行决定使用哪个。
2
相关新闻>>
- 发表评论
-
- 最新评论 更多>>