设计模式之策略模式
2018-09-22 本文已影响0人
正在加载更多
定义
策略模式(Strategy:它定义了算法家族,分别封装起来,让它们之间可以相互退换,此模式让算法的变化,不会影响到使用算法的客户
UML类图
策略模式UML类图代码
- Strategy.java
public interface Strategy {
long getResult();
}
- AddStrategy.java
public class AddStrategy implements Strategy {
private long numberA;
private long numberB;
public AddStrategy(long numberA, long numberB) {
this.numberA = numberA;
this.numberB = numberB;
}
@Override
public long getResult() {
return numberA + numberB;
}
public long getNumberA() {
return numberA;
}
public void setNumberA(long numberA) {
this.numberA = numberA;
}
public long getNumberB() {
return numberB;
}
public void setNumberB(long numberB) {
this.numberB = numberB;
}
}
- SubStrategy.java
public class SubStrategy implements Strategy {
private long numberA;
private long numberB;
public SubStrategy(long numberA, long numberB) {
this.numberA = numberA;
this.numberB = numberB;
}
@Override
public long getResult() {
return numberA - numberB;
}
public long getNumberA() {
return numberA;
}
public void setNumberA(long numberA) {
this.numberA = numberA;
}
public long getNumberB() {
return numberB;
}
public void setNumberB(long numberB) {
this.numberB = numberB;
}
}
- Context.java
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public long getResult(){
return strategy.getResult();
}
}
- ClientTest.java
public class ClientTest {
public static void main(String[] args) {
Strategy addStrategy = new AddStrategy(1L,2L);
Context context = new Context(addStrategy);
long result = context.getResult();
System.out.println(result);
}
}
策略模式解析
策略模式就是用来封装变化的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
策略模式与工厂方法模式的区别
-
用途不一样
工厂是创建型模式,它的作用就是创建对象;
策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; -
关注点不一样
一个关注对象创建
一个关注行为的封装 -
解决不同的问题
工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;
策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。