Java设计模式-9 、策略模式

策略模式

策略模式( Strategy Pattern )属于对象的⾏为模式。其⽤意是针对⼀组算 法,将每⼀个算法封装到具有共同接⼝的独⽴的类中,从⽽使得它们可以 相互替换。策略模式使得算法可以在不影响到客户端的情况下发⽣变化。 其主要⽬的是通过定义相似的算法,替换 if else 语句写法,并且可以随时 相互替换。

策略模式有什么好处?

定义了⼀系列封装了算法、⾏为的对象,他们可以相互替换。
举例: Java.util.List 就是定义了⼀个增( add )、删( remove )、改 ( set )、查( indexOf )策略,⾄于实现这个策略的 ArrayList 、 LinkedList 等类,只是在具体实现时采⽤了不同的算法。但因 为它们策略⼀样,不考虑速度的情况下,使⽤时完全可以互相替换使⽤。

代码:

1, 策略接口

public interface Strategy {
	PayInfo payForSometh();
}

 2 支付类的实体类

public class PayInfo {
	String payType;
	String payCode;
	String payDesc;
	
	public PayInfo(String payType, String payCode, String payDesc) {
		super();
		this.payType = payType;
		this.payCode = payCode;
		this.payDesc = payDesc;
	}

	public String getPayType() {
		return payType;
	}
	public void setPayType(String payType) {
		this.payType = payType;
	}
	public String getPayCode() {
		return payCode;
	}
	public void setPayCode(String payCode) {
		this.payCode = payCode;
	}
	public String getPayDesc() {
		return payDesc;
	}
	public void setPayDesc(String payDesc) {
		this.payDesc = payDesc;
	}
}

 3 微信支付策略

public class WxPay implements Strategy {

	@Override
	public PayInfo payForSometh() {
		System.out.println("通过微信支付");
		PayInfo pin = new PayInfo("微信", "1", "支付成功");
		return pin;
	}

}

4  支付宝策略

public class ZfbPay implements Strategy {

	public PayInfo payForSometh() {
		System.out.println("调用支付宝支付功能,根据返回值进行PayInfo类信息的设置");
        PayInfo zhifubaoPayInfo= new PayInfo("支付宝", "0", "支付成功");
        return zhifubaoPayInfo;
	}

}

 5.  测试类

public class TMain {

	public static void main(String[] args) {
		Strategy strategy = new WxPay();
		Strategy strategy2 = new ZfbPay();
		PayInfo payinfo = strategy2.payForSometh();
		PayInfo payInfo = strategy.payForSometh();


		System.out.println(payinfo.getPayType() + "," + payinfo.getPayCode() + "," + payinfo.getPayDesc());
		System.out.println(payInfo.getPayType() + "," + payInfo.getPayCode() + "," + payInfo.getPayDesc());
	}
}

6 结果

 注意: 如果实际spring中应用策略,是要用bean的引入的。

这篇优化文章中有例子代码:

一次代码优化经验的分享_6个日的梦想的博客-CSDN博客

总结

  1. 在我的理解中策略模式的核心就是面向接口编程。把每个具体的算法封装成一个类,使用继承方便封装公共需求,减少了算法间的耦合。
  2. 使用context上下文对象,减轻了客户端的职责。由context来去判断使用哪种算法。当然这一部分你可以使用反射,使用了反射的话那么switch语句都省了。
优点
1.解耦,避免使用多重条件判断。
2.可扩展新好

缺点
1.类会增多
2.所有策略类都需要对外暴露
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值