将一组同类型的算法分别封装,提供统一接口,以实现灵活的算法替换,涉及到三个层需要实现: 1.同类型算法的共性。 2.每个算法的不同实现。 3.调用的接口,封装角色。
我们来利用策略模式实现一个计算器,计算器有很多种运算的法则,但每一种法则的核心都是运算。
首先实现不同运算法则的共性:
Interface Calculator { Public int exec{int a, int b}; }具体的运算法则: 加法运算
Public class add implements Calculate{ Public int exec(int a, int b){ Return a+b; } }减法运算
Public class sub implements Calculate{ Public int exec(int a, int b){ Return a-b; } }封装角色,封装角色的作用是可以保证策略可以随时替换
Public class context{ Private Calculator cal = null; Public context(calculator _cal) { This.cal = _cal; } Public int exec(int a, int b, String symbol) { Return this.cal.exec(a,b) } }策略模式借用了代理模式的思路,与代理模式的主要区别在于策略模式的封装角色和被封装的策略类使用的不是同一个接口。 调用:
Context context = new Context(new add); Int result = context.exec(1, 2, “+”);优点: 1.实现灵活的算法切换,便于同等类型算法的管理 2. 使用策略模式可以避免使用多重条件(if-else)语句 多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。