设计模式——策略模式

一、定义

策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换,策略模式让算法独立于使用他的客户而独立变化。

二、UML类图



三、适用场景

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

2、需要在不同的情况下使用不同的策略(算法),或者策略还可能在未来用其它方式实现。

3、对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

四、代码实现


对应的UML图的对象如下:
Stragety——TravelStrategy(策略接口)
Context——Travel(环境)
ConcreteStragety——AirPlaneStrategy、RailWayStrategy、TrainStrategy(具体策略类)

比如说我打算出去旅行,所以需要计划一下坐哪种交通工具比较好。

有飞机、火车、高铁三种交通工具供我选择。我将从这三种进行选择比较适合我出行的交通工具。

首先很明确的是这三个交通工具都可以作为出行的工具。

所以我们要定义一个旅行策略接口TrainStrategy



public interface TravelStrategy {
	void travelAlgorithm();
}


public class AirPlaneStrategy implements TravelStrategy {
	@Override
	public void travelAlgorithm() {
		System.out.println("飞机旅行策略");
	}
}


public class RailWayStrategy implements TravelStrategy {
	@Override
	public void travelAlgorithm() {
		System.out.println("高铁旅行策略");
	}
}


public class TrainStrategy implements TravelStrategy {
	@Override
	public void travelAlgorithm() {
		System.out.println("火车旅行策略");
	}
}


public class Travel {
	privat TravelStrategy strategy
		public void setTravelStrategy(TravelStrategy strategy) {
		this.strategy=strategy
	}
public void selectStrategy(){
	strategy.travelAlgorithm();
	}
}


public class Client{
	public static void main(String[] args) {
        //创建策略对象
	TravelStrategy strategy=new AirPlaneStrategy();
	Travel travel = new Travel();
	travel.setTravelStrategy(strategy);
	travel.selectStrategy();
	}
}

五、总结

策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。这个模式很好的演示了开闭原则,也就是定义抽象,注入不同的实现,从而达到很好的可扩展性。

优点:

1、结构清晰明了、使用简单直观

2、耦合度相对而言较低,扩展方便

3、操作封装也更为彻底,数据更为安全

4、使用策略模式可以避免使用多重条件转移的语句。

缺点:

策略模式会造成很多的策略类。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值