java设计模式之策略模式

在这里我不想再说什么策略模式是行为型模式中的一种之类的比较笼统的话(当然这种话用还是有用的),直接上例子解析,简单易懂。设计模式很多时候就是多余接口和抽象类的灵活运用,策略模式也不例外,所以废话不多说直接开始。

先实现一个接口Algorithm

public interface Algorithm {

	public void operate();
}
再写两个实现类

public class Add implements Algorithm {

	public void operate() {
		// TODO Auto-generated method stub
		System.out.println("加法");
	}

}

public class Div implements Algorithm {

	public void operate() {
		System.out.println("除法");

	}

}
最后实现一个辅助类(有些地方会说这个辅助类可有可无,但是我还是觉得这个比较有用)

public class Assist {

	private Algorithm alg;
	
	public Assist(Algorithm alg){
		this.alg = alg;
	}
	public void operate(){
		format();
		alg.operate();
	}
	/**
	 * 辅助功能
	 */
	public void format(){
		System.out.println("格式检查");
	}
}
最后调用这个Assist类即可

public class Calc {

	public static void main(String[] args){
		Assist as ; 
		as = new Assist(new Add());
		as.operate();
		as = new Assist(new Div());
		as.operate();
	}
}

当要增加算法是可以灵活添加,不影响调用的方式。

策略模式还有一种实现的方式,区别在于辅助类Assist,抽象Assist类,让各个算法继承

public abstract class AssistS {
	/**
	 * 辅助功能
	 */
	public void format(){
		System.out.println("格式检查");
	}
}
各个算法类中继承这个抽象类作为辅助功能完善自己的功能

public class Div extends AssistS implements Algorithm {

	public void operate() {
		format();
		System.out.println("除法");

	}

}
public class Add extends AssistS implements Algorithm {

	public void operate() {
		// TODO Auto-generated method stub
		format();
		System.out.println("加法");
	}

}
调用方式上麻烦了一些,调用者需要记更多的东西了(个人觉得)

public class Calc {

	public static void main(String[] args){
		/*Assist as ; 
		as = new Assist(new Add());
		as.operate();
		as = new Assist(new Div());
		as.operate();*/
		Add ad = new Add();
		ad.operate();
		Div dv =new Div();
		dv.operate();
	}
}

上面的两种策略模式的实现方式都可,至于那种更好仁者见仁,不多说了

参考:http://blog.csdn.net/zhangerqing/article/details/8243942


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值