个人理解:一个父接口,多个子实现类,这些子实现类对应着一个一个的策略,每个实现类有自己单一的功能(解耦合),大大降低了耦合度,建立一个总类(Contex),创建父接口对象,调用父接口中的方法。在实现时由客户去创建实现类,然后Contex里调用对应实现类里的方法。
理解起来不是特别难,又学会一种,冲冲冲!!!
官方文档 ----------------》》》》
策略模式在策略模式(Strategy Pattern)中,⼀个类的行为或其算法可以在运⾏时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和⼀个行为随着策略对象改变⽽改变的context对象。策略对象改变context对象的执⾏算法。
介绍意图:定义⼀系列的算法,把它们⼀个个封装起来,并且使它们可相互替换(多态)。
主要解决:在有多种算法相似的情况下,使⽤if...else所带来的复杂和难以维护。
何时使用:⼀个系统有许多许多类,⽽区分它们的只是他们直接的⾏为。
如何解决:将这些算法封装成⼀个⼀个的子实现类,可以任意地替换。
关键代码:实现同⼀个接⼝。
应用实例:
1.出游⽅式,选择骑⾃⾏⻋、坐汽⻋,每⼀种旅⾏⽅式都是⼀个策略。
2.JAVA AWT中的LayoutManager。
优点:
1.算法可以⾃由切换。
2.避免使⽤多重条件判断。
3.扩展性良好。
4.每一个策略对应一个子实现类,大大降低了耦合度
缺点:
1.类的数量会增多。
2.所有策略类都需要对外暴露(需要客户记忆多个策略类)。
使用场景:
1.如果在⼀个系统⾥⾯有许多类,它们之间的区别仅在于它们的⾏为,那么使⽤策略模式可以动态地让⼀个对象在许多⾏为中选择⼀种⾏为。
2.⼀个系统需要动态地在⼏种算法中选择⼀种。
3.如果⼀个对象有很多的行为,如果不⽤恰当的模式,这些行为就只好使⽤多重的条件选择语句来实现。
注意事项:如果⼀个系统的策略多于四个,就需要考虑使⽤混合模式,解决策略类膨胀的问题。
实现我们将创建⼀个定义活动的Strategy接⼝和实现了Strategy接⼝的实体策略类。Context是⼀个使⽤了某种策略的类。 StrategyPatternDemo,我们的演示类使⽤Context和策略对象来演示Context在它所配置或使⽤的策略改变时的 ⾏为变化。
具体步骤1.创建⼀个项⽬Java项⽬。
2.创建⼀个Strategy接⼝。
package src.com.设计模式.策略模式;
//一个实现类代表一个功能,易扩充,大大降低了耦合度
public interface Strategy {
int doOperation(int num1,int num2); //用doOperation对应算术运算的 *** 作
}
3.创建实现接⼝的实体类OperationAdd。
package src.com.设计模式.策略模式;
public class OperationAdd implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1+num2;
}
}
4.创建实现接⼝的实体类OperationSubtract。
package src.com.设计模式.策略模式;
public class OperationSubtract implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1-num2;
}
}
5.创建实现接⼝的实体类OperationMultiply。
package src.com.设计模式.策略模式;
public class OperationMultiply implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1*num2;
}
}
6.创建Context类。
package src.com.设计模式.策略模式;
/*
* Context表示使用哪种策略所对应的类
* */
public class Context {
//依赖于策略的接口(不能依赖实现类)
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
//执行策略的业务逻辑
public Object executeStrategy(int num1,int num2){
return strategy.doOperation(num1,num2);
}
}
7.创建StrategyPatternDemo类,使⽤Context来查看当它改变策略Strategy时的⾏为变化。
package src.com.设计模式.策略模式;
public class StrategyPatternDemo {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
Context context = new Context(new OperationAdd());
System.out.println((int)context.executeStrategy(num1,num2));
context = new Context(new OperationMultiply());
System.out.println((int)context.executeStrategy(num1,num2));
}
}
8.执⾏程序,输出结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)