设计模式-01-策略模式

策略?听起来很有智慧,其实,只是名字唬人而已。策略,通俗的说就是针对某个问题,大家出谋划策,以不同的方式达到解决问题的效果。打个比方,现在是春节,大家吃喝玩乐不亦乐乎,那就说吃饭吧,有时我们细嚼慢咽,而有时就狼吞虎咽,不同的环境下,我们的吃饭方式是不一样的,这就是所谓的策略。

 

定义:策略模式定义了一组针对某个行为的不同算法实现,并将这些算法封装起来,这些算法都是可以相互替换的,对于客户来说,这些算法的变化都是独立的。

 

UML图:


从途中可以看出,吃货作为客户,拥有Eatable接口应用,所以可以通过赋值不同的Eatable实现,实现策略模式

 

例子:

 

/**
 * 
 * @author 梅东
 * 算法接口
 */
public interface Eatable {
	public void eat();
}


/**
 * 封装算法的实现A
 * 
 * @author 梅东
 */
public class EatableImplA implements Eatable {

	@Override
	public void eat() {
		System.out.println("我狼吞虎咽");
	}

}


/**
 * 封装算法的实现B
 * 
 * @author 梅东
 */
public class EatableImplB implements Eatable {

	@Override
	public void eat() {
		System.out.println("我细嚼慢咽");

	}

}


/**
 * 客户
 * @author 梅东
 *
 */
public class Client {

	private Eatable eatable;

	public void setEatable(Eatable eatable) {
		this.eatable = eatable;
	}

	public void eat() {
		eatable.eat();
	}

	public static void main(String[] args) {
		Client client = new Client();
		client.setEatable(new EatableImplA());
		client.eat();
		System.out.println("改变吃的策略================");
		//改变吃的策略
		client.setEatable(new EatableImplB());
		client.eat();

	}

}

运行结果:

我狼吞虎咽
改变吃的策略================
我细嚼慢咽

 

至此,我们已经实现了一个简单的策略模式的例子,通过Eatable接口,解耦了客户和具体实现类,记住,解耦是设计模式中很重要的原则之一。

可能有人会问,为什么客户不实现Eatable接口?毕竟客户具有eat行为啊!对,但是如果使用实现接口的做法,我们就无法动态改变eat行为了,这里又引入了一条重要原则,多用组合,少用继承或实现。我们通过组合完美的达到了继承所能达到的效果,还避免了继承所带来的缺陷。

 

现在你应该可以感叹,策略模式原来如此啊!很简单,策略模式的应用场景我就不多说了,有兴趣的朋友可以查阅资料。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值