JAVA实例学习一为什么要用策略模式

来源:互联网 发布:淘宝客新手如何玩鹊桥 编辑:程序博客网 时间:2024/05/16 01:44

根据进程传入的参数干不同的事情,比如传入数值1,就打印出“参数值:1”,按照C的习惯肯定是if或者switch了,所以自然有如下代码:

public class strategy {public static void main(String[] args){strategyType type = new strategyType();type.type(args[0]);}}
public class strategyType {public static void type(String args){if(args.equals("1")){System.out.println("参数值:1");//尽量简化代码,实际工作中肯定不会这么简单} else if(args.equals("2")){System.out.println("参数值:2");}}}

增加一个类型3

public class strategyType {public static void type(String args){if(args.equals("1")){System.out.println("参数值:1");} else if(args.equals("2")){System.out.println("参数值:2");} else if(args.equals("3")){System.out.println("参数值:3");}}}

以前一直都是这么干的,最多就是把if里面的代码封装成一个函数,看起来if-else内部的代码比较少一点。但是JAVA讲究开闭原则,入乡随俗嘛,另外开闭原则确实也是很有道理的,尽量不改变已有的代码吧,所以想想怎么做比较好呢

到目前为止,我理解的面向对象语言和过程化语言最大的区别就是,“尽量封装,别人只能通过接口访问”,所以不管什么策略,什么模式,先把下面的代码封装封装,首先想到的就是把每个处理封装成不同的类

public class strategy {public static void main(String[] args){strategyType1 type1 = new strategyType1();type1.type(args[0]);strategyType3 type3 = new strategyType3();type3.type(args[0]);}}
public class strategyType3 {public static void type(String args){if(args.equals("3")){System.out.println("参数值:3");}}}

这样好像有点LOWER啊,应该为main提供一个统一的接口,对main来讲type3和type1都应该面对同一个接口,因为这个接口要处理type1和type3,然后不用if else,所以type1和type3应该使用相同的接口,最终改成如下这样:

//统一的处理接口public interface type{public void typeRes(String args);}
//具体的处理类public class strategyType1 implements type{public void typeRes(String args){if(args.equals("1")){System.out.println("参数值:1");}}}


//具体的处理类public class strategyType3 implements type{public void typeRes(String args){if(args.equals("3")){System.out.println("参数值:3");}}}

public class strategyType{type mType;public void strategyHandle(String args){mType.typeRes(args);}public void strategySet(type typei){mType = typei;}}

public class strategy {public static void main(String[] args){strategyType type = new strategyType();type.strategySet(new strategyType1());type.strategyHandle(args[0]);type.strategySet(new strategyType3());type.strategyHandle(args[0]);}}



回头再去看看书上说的策略模式,完全对上了  哈哈







原创粉丝点击