设计模式之策略模式

Java设计模式之策略模式详解

为了更好的理解这个模式,我们再举一个例子,我们出去旅游的时候可能有很多种出行方式,比如说我们可以坐火车、坐高铁、坐飞机等等。不管我们使用哪一种出行方式,最终的目的地都是一样的。也就是选择不同的方式产生的结果都是一样的。

1.策略模式的优点
  • 我们在做判断的时候,往往会使用if-else语句,也就是用户不选择A就选择B这样的一种情况。这种情况的耦合性太高了,而且代码臃肿,有了策略模式我们就可以避免这种现象。
  • 策略模式遵循开闭原则,实现代码的解耦合。扩展新的方法时也比较方便,只需要继承策略接口就好了。
2.策略模式的缺点
  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 策略模式会出现很多的策略类。
  • Context在使用这些策略类的时候,这些策略类由于继承了策略接口,所以有些数据可能用不到,但是依然初始化了。
3.代码
//第一步:定义抽象策略接口
interface TravelStrategy {
	public function travelAlgorithm();
}
//第二步:具体策略类
//第一种:使用火车
public class TrainStrategy implements TravelStrategy {
	@Override
	public void travelStyle() {
		System.out.println("出行方式选择乘坐火车");
	}
}
//第二种:使用高铁
public class HighTrainStrategy implements TravelStrategy {
	@Override
	public void travelStyle() {
		System.out.println("出行方式选择乘坐高铁");
	}
}
//第三种:使用飞机
public class AirStrategy implements TravelStrategy {
	@Override
	public void travelStyle() {
		System.out.println("出行方式选择乘坐飞机");
	}
}
第三步:环境类实现
public class Traveler {
	//出行策略接口
	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 TrainStrategy());
//		traveler.setTravelStrategy(new HighTrainStrategy());
//		traveler.setTravelStrategy(new AirStrategy());
		//游客出行
		traveler.travelStyle();			
	}
}
总结

策略模式把对象本身和运算规则区分开来,因此我们整个模式也分为三个部分:

  • 环境类(Context):用来操作策略的上下文环境,也就是我们的游客。
  • 抽象策略类(Strategy):策略的抽象,出行方式的抽象。
  • 具体策略类(ConcreteStrategy):具体的策略实现,每一种出行方式的具体实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值