根据进程传入的参数干不同的事情,比如传入数值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]);
}
}
回头再去看看书上说的策略模式,完全对上了 哈哈