一、定义
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 --- 《设计模式》
二、适用性
1、一些类只是行为不同,其他的是相同的。
2、需要使用一个算法的不同变体。
3、算法使用到了客户不应该知道的数据。
4、一个类中定义了多种行为,且这些行为在这个类的操作中以多个条件语句的形式出现。
三、代码实现
1、定义一个策略接口
package com.hqzmss.strategy;
public interface Strategy {
void print();
}
2、定义两个具体策略
package com.hqzmss.strategy;
public class ConcreteStrategyOne implements Strategy {
public void print() {
System.out.println("打印一行");
}
}
package com.hqzmss.strategy;
public class ConcreteStrategyTwo implements Strategy{
public void print() {
System.out.println("打印两行");
}
}
3、定义上下文
package com.hqzmss.strategy;
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void print() {
this.strategy.print();
}
}
4、测试类
package com.hqzmss.strategy;
public class TestClass {
public static void main(String[] args) {
// 这里的构造方法中传入一个具体策略
Context context = new Context(new ConcreteStrategyTwo());
context.print();
}
}
四、优点
1、可以析取出算法中的公共功能
2、替代继承方法
3、消除条件语句
4、实现同一行为不同的算法选择
五、缺点
1、客户必须了解具体的策略实现,才好选择
2、Strategy跟Context之间的通信开销
3、增加了对象的数目
六、专业术语
1、Strategy:策略
2、ConcreteStrategy:具体策略
3、Context:上下文
网友评论