这样来理解策略模式

这样来理解策略模式
我们还记得以前上数学课的时候,老师总是对一个问题进行多种解法进行分析,每一种解决都是一种策略,这就是策略模式的思想。

为了更好的理解这个策略模式,我这边画一个图便于大家快速的理解,比如我们外出旅游需要的交通方式有飞机,高铁,大巴 每一种出行方式都是一种策略方案,不管我们选择那种方式,最终到达的目的地都是一样的。
在这里插入图片描述
二,策略模式实际上是把对象本身跟出行方式区分出来,这里可以分成三部分,

  • 策略上下文封装角色:其实这里就是指我们的游客
  • 抽象策略类:其实就是我们的出行方式,飞机,高铁,大巴
  • 具体的抽象实现类:主要看我们一种出行方式的实现类

抽象策略类

public interface TravelStrategy {
//定义抽象出行方式	
public void travelStyle();
}

抽象具体实现类
//第一种乘坐大巴

public class BusTrain implements TravelStrategy{
   
   public void travelStyle() {
	    System.out.println("乘坐大巴");
}
}
 

//第二种乘坐高铁

public class HightTrain implements TravelStrategy{

  public void travelStyle() {
		System.out.println("第二种乘坐高铁");
	}

}

//第三种乘坐飞机

public class AirStrategy implements TravelStrategy{

public void travelStyle() {
		System.out.println("第三种乘坐飞机");
		}

}

Context上下文角色,也叫Context封装角色,起承上启下的作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。

public class Context {
	//出行策略的接口
  TravelStrategy travelStrategy;
  
  
   //出行策略方案
  public void setTravelStrategy(TravelStrategy travelStrategy) {
	this.travelStrategy = travelStrategy;
}




//为当前用户设置出行方式
	


public void travelStyle() {
		travelStrategy.travelStyle();
	}
	
}

客户端测试类测试
//客户端测试类

public class Client {
public static void main(String[] args) {
	Context context=new Context();
	context.setTravelStrategy(new BusTrain());
	context.travelStyle();
	
   context.setTravelStrategy(new HightTrain());
context.travelStyle();
	
context.setTravelStrategy(new AirStrategy());
	context.travelStyle();
}
}

出行方案结果
在这里插入图片描述
策略模式的优点

  1. 我们之前在选择出行方式的时候,往往会使用if-else语句,也就是用户不选择A那么就选择B这样的一种情况。这种情况耦合性太高了,而且代码臃肿,有了策略模式我们就可以避免这种现象,
  2. 扩展性良好,增加一个策略只需实现接口即可

策略模式的缺点
3. 策略类数量会增多,每个策略都是一个类,复用的可能性很小

如果文章有错的地方欢迎指正,大家互相交流

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值