1.
什么是策略模式?策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
2.
策略模式有什么好处?策略模式的好处在于你可以动态的改变对象的行为。
3.
设计原则设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(
c++z中可以用虚类,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
4 .
策略模式中有三个对象:●
环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
●
抽象策略对象:它可由接口或抽象类来实现。●
具体策略对象:它封装了实现同不功能的不同算法。利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。
TheInterface.java
package strategyPattern;
//抽象策略
public interface TheInterface {
// 策略方法
public abstract double add();
}
Strategy1.java
package strategyPattern;
//具体策略
public class Strategy1 implements TheInterface {
@Override
public double add() {
System.out.println(this.getClass().getName() + "的加法运算");
return 0;
}
}
Strategy2.java
package strategyPattern;
//具体策略
public class Strategy2 implements TheInterface {
@Override
public double add() {
System.out.println(this.getClass().getName() + "的加法运算");
return 0;
}
}
Context .java
package strategyPattern;
//环境角色类
public class Context {
private TheInterface strategy;
public Context(TheInterface strategy) {
this.strategy = strategy;
}
// 策略方法
public double add() {
this.strategy.add();
return 0;
}
}
Test.java
package strategyPattern;
public class Test {
public static void main(String[] args) {
Context context = new Context(new Strategy1());
context.add();// 执行算法1
context = new Context(new Strategy2());
context.add();// 执行算法2
}
}
运行结果 :
strategyPattern.Strategy1的加法运算
strategyPattern.Strategy2的加法运算