设计模式-------策略模式

一、概述

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,并且算法的变化不会影响到使用算法的客户

二、结构

在这里插入图片描述
策略模式把对象本身和运算规则区分开来,因此我们整个模式也分为三个部分。
环境类(Context):用来统一调控策略模式。
抽象策略类(Strategy):策略的抽象类,一般定义为接口方便扩展,抽象出策略方法
具体策略类:具体的策略实现,实现Strategy

三、例子

在这里插入图片描述
1、抽象策略类:

public interface TravelStrategy{

	public void travelStyle();
}

2、具体策略类

高铁具体实现:

public class HighTrainStrategy implements TravelStrategy{
	public void travelStyle(){
		System.out.println(“乘坐高铁去旅游啦。。。。”);
	}
}

火车具体实现:

public class TrainStrategy implements TravelStrategy{
	public void travelStyle(){
		System.out.println(“乘坐火车去旅游啦。。。。”);
	}
}

飞机具体实现:

public class AirStrategy implements TravelStrategy{
	public void travelStyle(){
		System.out.println(“乘坐飞机去旅游啦。。。。”);
	}
}

3、环境类实现

public class Traveler{
	private TravelStrategy travelStrategy;
	
	public void setTravelStrategy (TravelStrategy  travelStrategy){
		this.travelStrategy=travelStrategy;
	}
	
	public void travelStyle(){
		travelStrategy.travelStyle();
	}
	
	public static void main(String[] args) {
	     Traveler traveler=new Traveler();
		 traveler.setTravelStrategy(new AirStrategy ());
		 traveler.travelStyle();
	}
}

四、实际项目可运用的地方

1、收款单流水:根据业务事件类型的不同去执行不同的算法
在这里插入图片描述
2、策略模式+简单工厂

public interface Strategy{
	public void add();
}

//业务事件=收款

public class AStrategy implements Strategy {
	public void add(){
	......
	}
}

//业务事件=定金锁定

public class BStrategy implements Strategy {
	public void add(){
	......
	}
}
public class Factory{
	public static Strategy createStrategy(Sring busiEventType){
	Strategy  strateger=null;
	
	//业务事件=收款
	if(busiEventType.equals(“ECWSK0001”)){
		strateger=new AStrategy();
	}else if(busiEventType.equals(“BBB”)){
	//业务事件=定金锁定
		strateger=new BStrategy();
	
	}
	return strateger;
	}
}
public class Test{
	public static void main(String[] args) {
		//业务事件=收款
		 Strategy  s=Factory.createStrategy(“ECWSK0001”);
		 s.add();
	}

}

五、策略模式的优缺点

1、优点
策略模式符合开闭原则
提高了代码的可复用性
2、缺点
客户端必须知道所有的策略,并且自行决定使用哪一个策略类。
代码中会产生非常多策略类,增加维护难度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值