2014/7/19 策略模式

来源:互联网 发布:矩阵行列式 编辑:程序博客网 时间:2024/06/05 16:36

一:策略模式例子:

先附上代码:

IStrategy.java

package strategyPattern;public interface IStrategy {public void operate();}

BackDoor.java

package strategyPattern;public class BackDoor implements IStrategy{public void operate() {// TODO Auto-generated method stubSystem.out.println("妙计1");}}

GivenGreenLight.java

package strategyPattern;public class GivenGreenLight implements IStrategy{public void operate() {// TODO Auto-generated method stubSystem.out.println("妙计2");}}

BlockEnemy.java

package strategyPattern;public class BlockEnemy implements IStrategy{public void operate() {// TODO Auto-generated method stub    System.out.println("妙计3");}}

Context.java

package strategyPattern;//封装类(即锦囊)public class Context {private IStrategy strategy;//构造函数:决定使用哪个妙计public Context(IStrategy _strategy){this.strategy = _strategy;}//使用计谋public void operate(){this.strategy.operate();}}

ZhaoYun.java

package strategyPattern;public class ZhaoYun {public static void main(String[] args){Context context;System.out.println("---使用第一个妙计---");context = new Context(new BackDoor());context.operate();System.out.println("\n");System.out.println("---使用第二个妙计---");context = new Context(new GivenGreenLight());context.operate();System.out.println("\n");System.out.println("---使用第三个妙计---");context = new Context(new BlockEnemy());context.operate();System.out.println("\n");}}

二.策略模式定义:

策略模式使用的是面向对象中的继承和多态机制

三个角色如下:

1.Context封装角色:起封装作用,屏蔽高层模块对策略,算法的直接访问

2.Strategy抽象策略角色:通常为借口,定义每个策略或算法必须具有的属性和方法

3.ConcreteStrategy具体策略角色:实现抽象策略角色的操作

通用源码如下:

Strategy.java

package strategyPattern;//抽象策略角色public interface Strategy {public void doSomething();}

ConcreteStrategy1.java

package strategyPattern;//具体策略角色public class ConcreteStrategy1 implements Strategy{public void doSomething() {// TODO Auto-generated method stubSystem.out.println("策略1的具体实现");}}

ConcreteStrategy2.java

package strategyPattern;//具体策略角色public class ConcreteStrategy2 implements Strategy{public void doSomething() {// TODO Auto-generated method stubSystem.out.println("策略1的具体实现");}}

Context.java

package strategyPattern;//封装角色public class Context {private Strategy strategy = null;public Context(Strategy _strategy){this.strategy = _strategy;}public void doAnything(){this.strategy.doSomething();}}

Client.java

package strategyPattern;//高层模块public class Client{public static void main(String[] args){Strategy strategy = new ConcreteStrategy1();Context context  = new Context(strategy);context.doAnything();}}

0 0