设计模式之略见一斑(策略模式strategy)
???
???
????
/** * 策略 * @author Administrator * */public class Stratery {protected String stratery;public Stratery(String stratery){this.stratery = stratery;}}/** * 策略1 * @author Administrator * */public class Stratery1 extends Stratery {public Stratery1(String stratery){super(stratery);}}/** * 策略2 * @author Administrator * */public class Stratery2 extends Stratery{public Stratery2(String stratery){super(stratery);}}/** * 策略3 * @author Administrator * */public class Stratery3 extends Stratery{public Stratery3(String stratery){super(stratery);}}?
传统的实现方法如下:
?
public static Stratery get(int cas){ switch (cas) {case 1:return new Stratery1("策略1");case 2:return new Stratery2("策略2");case 3:return new Stratery1("策略3");default:return null;} }?
根据用户的情况返回。
?
?
下面仅对上面的代码进行重构,使其成为strategy模式
定义一个共同的接口:
?
public interface Advisor { public Stratery getAdvisor();}?
每个策略方案都实现这个接口:
?
/** * 策略1 * @author Administrator * */public class Stratery1 extends Stratery implements Advisor{public Stratery1(String stratery){super(stratery);}public Stratery1 getAdvisor() {// TODO Auto-generated method stubreturn this;}public String toString(){return stratery;}}?
最后利用接口实现策略调用:
public class New {public static Advisor getAdvisor(int cas) {switch (cas) {case 1:return new Stratery1("策略1").getAdvisor();case 2:return new Stratery2("策略2").getAdvisor();case 3:return new Stratery3("策略3").getAdvisor();default:return null;}}public static void main(String[] args) {Advisor a = getAdvisor(1);System.out.println(a);}}?
?
重构的核心思想就是:将一个操作分布在一组相关的类中。
?
1 楼 EyejavaLi 2010-03-19 想请问下 不知道这样添加一个接口的重构有什么好处?