设计模式之策略模式(Strategy)
策略模式的用意是针对一组算法或者说实现,将每一个算法(实现)封装到具有共同接口(抽象类)的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。 环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端。
先来看一没有用策略模式的类:public class Output { public void OutputMethod(char flag) { switch (flag) { case 'A': System.out.println("Output flag A"); break; case 'B': System.out.println("Output flag B"); break; case 'C': System.out.println("Output flag C"); break; default: break; } } }
客户端调用:
Output output = new Output(); output.OutputMethod('B');
策略模式由三部分实现:
A: 抽象策略角色:策略类,通常由一个接口或者抽象类实现
B:具体策略角色:包装了相关的算法和行为
C: 环境角色:持有一个策略类的引用,最终给客户端调用的。public interface Ioutput { void output(); } public class Aoutput implements Ioutput { public void output() { System.out.println("Output flag A"); } } public class Boutput implements Ioutput { public void output() { System.out.println("Output flag B"); } } public class Context { private Ioutput output ; Context(Ioutput output){ this.output = output ; } public void output(){ output.output(); } }
客户端调用:
Context context = new Context(new Aoutput()); context.output(); Context bcontext = new Context(new Boutput()); bcontext.output();
策略模式优点:
1.可以很方便的动态改变算法或行为
2.避免使用多重条件转移语句
策略模式缺点:
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2.造成很多的策略类。
相关推荐
tracy 2020-08-31
natloc 2020-07-18
Codeeror 2020-06-28
baike 2020-06-14
Ingram 2020-06-04
yishujixiaoxiao 2020-06-03
走在IT的路上 2020-05-01
txlCandy 2020-04-20
清溪算法君老号 2020-04-14
wuxiaosi0 2020-02-22
shawsun 2020-02-14
spb 2020-02-14
xcguoyu 2020-02-14
wangxiaohua 2014-05-29
mbcsdn 2019-12-20
ustbfym 2019-12-01