读书人

设计形式之略见一斑(策略模式strategy)

发布时间: 2012-11-20 09:55:43 作者: rapoo

设计模式之略见一斑(策略模式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 想请问下 不知道这样添加一个接口的重构有什么好处?

读书人网 >软件开发

热点推荐