设计模式(21)------策略模式

来源:互联网 发布:手机绿色上网软件 编辑:程序博客网 时间:2024/06/09 13:40

策略模式作用:

定义一个个算法,把这些算法封装起来,同时使这些算法可以相互替换。


应用场景:

(1)许多相关的类仅仅是行为有异,该模式提供一种用多个行为中的一个行为来配置一个类的方法。

(2)需要使用一个算法的不同变体。

(3)算法使用用户不应该知道的数据,使用该模式以避免暴露复杂的,与算法相关的数据结构。


参与对象:

(1)Strategy

定义所有支持的算法的公共接口。Context使用这个接口来调用ConcreteStrategy定义的算法。

(2)ConcreteStrategy

实现Strategy接口,实现某些具体的算法。

(3)Context

用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用,

可以定义一个接口让Strategy访问其数据。


eg:

Strategy

package com.lanhuigu.base.design.behavior.strategy;/** * Strategy: 定义所有支持的算法的公共接口。 * Context使用这个接口来调用ConcreteStrategy定义的算法 */public abstract class Strategy {public abstract void method();}

ConcreteStrategy

package com.lanhuigu.base.design.behavior.strategy;/** * ConcreteStrategy: 算法的实现,实现Strategy接口,实现某些具体的算法 */public class StrategyImplA extends Strategy {@Overridepublic void method() {// TODO Auto-generated method stubSystem.out.println("第一个实现类--A算法");}}

package com.lanhuigu.base.design.behavior.strategy;/** * ConcreteStrategy: 算法的实现,实现Strategy接口,实现某些具体的算法 */public class StrategyImplB extends Strategy {@Overridepublic void method() {// TODO Auto-generated method stubSystem.out.println("第二个实现类--B算法");}}

Context

package com.lanhuigu.base.design.behavior.strategy;/** * Context: 用一个ConcreteStrategy对象来配置。 * 维护一个对Strategy对象的引用,可以定义一个接口让Strategy访问其数据。 */public class Context {Strategy strategy;public Context(Strategy strategy) {// TODO Auto-generated constructor stubthis.strategy = strategy;}public void doMethod() {strategy.method();}}

Client

package com.lanhuigu.base.design.behavior.strategy;public class Test {public static void main(String[] args) {Context ctxA = new Context(new StrategyImplA());ctxA.doMethod();Context ctxB = new Context(new StrategyImplB());ctxB.doMethod();}}

运行结果:



0 0
原创粉丝点击