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]);
	}
}

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值