策略模式——你要用支付宝还是微信?


       在生活中我们有很多选择,你想喝一种饮料,你可以选择可乐,芬达,加多宝等等;你想去旅行,可以选择单车,步行,货车,火车。选择,很多。是的,用代码怎么去表达?一般情况下,很多人会选择if...else...这种表达方式,但是如果你拥有了更多的选择,想要添加进去或者修改,是在代码上直接再加一个还是修改?事实上,很对软件开发的工程中,代码的量相当庞大,牵一发而动全身是极其危险的。这时候,如何减少整个代码的关联性,增强代码的灵活性和可移植性。就变得很重要了,设计模式这种方式在一定程度上满足我们的要求,

       策略模式的策略体现在哪?就是你可以做出不同的决定,比如说你想喝可乐变成想喝加多宝了。这就做动态的改变对象的行为。因此策略模式多用于一下几个场景

           (1) 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

           (2) 类似if...else语句的多种条件转移的时候

       策略模式在不同的情况下做出不同的判断。隐藏实现的细节,消除耦合。下面我借一下别人图来看看整个UML中,策略模式是怎么运作的

实现一个策略接口,让context来拥有成员变量。需要用到哪种策略,我们用构造器来指定。(引用:http://www.cnblogs.com/jenkinschan/p/5645300.html)


理论还是要付诸于实践,我们看代码:

       举个例子。我写一个客户在超市结账时选择不同的支付方式,先写一个接口

public interface SuperMarketWay {
		public void getPay();
}

下面用支付宝和微信来实现接口

public class WeixinPay implements SuperMarketWay{
	
	@Override
	public void getPay() {
		// TODO Auto-generated method stub
		System.out.println("我选择用微信支付");
	}

}
public class ZhifubaoPay implements SuperMarketWay{

	@Override
	public void getPay() {
		// TODO Auto-generated method stub
		System.out.println("我选择使用支付宝支付");
	}

}

创建一个客户端的用户,包含超市的策略和支付的方式
public class Custom {
	//超市的策略接口
	public SuperMarketWay smw;
	//包含购买方式
	public void customGetWay(){
		smw.getPay();
	}
}

创建一个青年的类继承客户端,初始化支付宝的支付方式

public class Tennager extends Custom{
	public Tennager(){
		smw=new WeixinPay();
	}
}

我们来进行测试

public class MainTest {
	public static void main(String[] args) {
		//测试青年的支付方式
		Custom young=new Tennager();
		young.customGetWay();
	}
}


测试结果如下





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值