设计模式:7、策略模式(政策)

目录

0、定义

1、策略模式的三种角色

2、策略模式的UML类图

3、示例代码


0、定义

定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

1、策略模式的三种角色

  • 策略(Strategy):策略是一个接口,该接口定义若干个算法标识,即定义了若干个抽象方法。
  • 具体策略(concreteStrategy):具体策略 是实现策略接口 的类。具体策略 实现策略接口所定义的抽象方法,即给出算法标识的具体算法。
  • 上下文(Context):上下文 是依赖于策略接口 的类,即上下文 包含有策略 声明的变量。上下文 中提供一个方法,该方法委托策略 变量调用具体策略所实现的策略接口中的方法。

2、策略模式的UML类图

3、示例代码

策略:

java 复制代码
package xyz.jangle.design.strategy;

public interface Strategy {
	
	public void algorithm();

}

具体策略A

java 复制代码
package xyz.jangle.design.strategy;

public class ConcreteStrategyA implements Strategy {

	@Override
	public void algorithm() {
		System.out.println("这是方法A");
	}

}

具体策略B

java 复制代码
package xyz.jangle.design.strategy;

public class ConcreteStrategyB implements Strategy {

	@Override
	public void algorithm() {
		System.out.println("这是方法B");
	}

}

上下文

java 复制代码
package xyz.jangle.design.strategy;

public class Context {
	
	private Strategy strategy;

	public Context(Strategy strategy) {
		super();
		this.strategy = strategy;
	}

	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public void lookAlgorithm() {
		strategy.algorithm();
	}
	

}

客户端(使用)

java 复制代码
package xyz.jangle.design.strategy;

public class AppMain7 {

	public static void main(String[] args) {
		ConcreteStrategyA strategyA = new ConcreteStrategyA();	
		Context context = new Context(strategyA);		// 注入策略A
		context.lookAlgorithm();
		System.out.println("-------------");
		context.setStrategy(new ConcreteStrategyB());	// 注入策略B
		context.lookAlgorithm();

	}

}

执行结果:

bash 复制代码
这是方法A
-------------
这是方法B
相关推荐
乙己4073 小时前
设计模式——原型模式(prototype)
设计模式·原型模式
⑩-3 小时前
浅学Java-设计模式
java·开发语言·设计模式
攻心的子乐3 小时前
软考 关于23种设计模式
java·开发语言·设计模式
成钰7 小时前
设计模式之单例模式:一个类就只有一个实例
单例模式·设计模式
o0向阳而生0o7 小时前
110、23种设计模式之状态模式(19/23)
设计模式·状态模式
_院长大人_7 小时前
设计模式-单例模式
单例模式·设计模式
崎岖Qiu16 小时前
【设计模式笔记17】:单例模式1-模式分析
java·笔记·单例模式·设计模式
安冬的码畜日常21 小时前
【JUnit实战3_27】第十六章:用 JUnit 测试 Spring 应用:通过实战案例深入理解 IoC 原理
spring·观察者模式·设计模式·单元测试·ioc·依赖注入·junit5
她说彩礼65万1 天前
C#设计模式 单例模式实现方式
单例模式·设计模式·c#
安冬的码畜日常1 天前
【JUnit实战3_28】第十七章:用 JUnit 5 实测 SpringBoot 项目
spring boot·功能测试·测试工具·设计模式·单元测试·junit5