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

根据进程传入的参数干不同的事情,比如传入数值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]);
	}
}




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







发布了85 篇原创文章 · 获赞 24 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览