策略模式

摘要

  本文通过简洁的模式描述,应用场景的详细代码实现,以及匹配的UML,详解介绍了策略模式的原理及应用。本文可帮助读者快速掌握策略模式,以便工作学习中使用策略模式。

一、策略模式

  在生活中,我们要达到一个目标,可以采用不同的策略,比如从深圳到北京,我们有至少三种策略,第一种策略坐飞机,第二种策略是高铁,第三种策略是自驾。
  在编程中,一个执行类也会有多个策略可以选择,所以这里存在变化,就会导致后期对代码的重构,从而违背了“开闭原则”。
  策略模式将不同策略与执行类进行解耦,让策略单独封装成类,这样策略就具有很强的可扩展性。

二、策略模式的实现

2.1 场景设计

  执行者Tom、执行者Damon,他们的执行策略有planA、planB、planC。

2.2 代码实现

2.2.1 Strategy 策略抽象类

package ft.patterns.stragegy;

public interface Strategy {
	public void handle();
}

2.2.2 PlanA 策略具体类

package ft.patterns.stragegy;

public class PlanA implements Strategy{

	@Override
	public void handle() {
		System.out.println("Start plan A");
	}

}

2.2.3 PlanB 策略具体类

package ft.patterns.stragegy;

public class PlanB implements Strategy{

	@Override
	public void handle() {
		System.out.println("Start plan B");
	}

}

2.2.4 PlanC 策略具体类

package ft.patterns.stragegy;

public class PlanC implements Strategy{

	@Override
	public void handle() {
		System.out.println("Start plan C");
	}

}

2.2.5 Executor 抽象执行类

package ft.patterns.stragegy;
// 声明为抽象类,即可以声明接口方法,也可以定义一些具体实现
public abstract class Executor {
	protected Strategy strategy;
	abstract void handle();
	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}
}

2.2.6 ExecutorTom 具体执行类

package ft.patterns.stragegy;

public class ExecutorTom extends Executor{

	@Override
	void handle() {
		this.strategy.handle();
	}
}

2.2.7 ExecutorDamon 具体执行类

package ft.patterns.stragegy;

public class ExecutorDamon extends Executor{

	@Override
	void handle() {
		this.strategy.handle();
	}
}

2.2.8 Main 测试类

package ft.patterns.stragegy;

public class Main {

	public static void main(String[] args) {
		try {
			Class clz = Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		Strategy planA = new PlanA();
		Strategy planB = new PlanB();
		Strategy planC = new PlanC();
		
		Executor Tom = new ExecutorTom();
		Executor Damon = new ExecutorDamon();
		
		Tom.setStrategy(planA);
		Tom.handle();
		
		Tom.setStrategy(planB);
		Tom.handle();
		
		Damon.setStrategy(planC);
		Damon.handle();
	}
}

三、策略模式的UML图

策略模式UML类图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值