atwood-pan

 

11-设计模式——策略模式

设计模式——策略模式

策略模式 ==> Strategy

模式定义:

定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者

策略模式可以让算法独立于使用它的客户端

Class Diagram

  • Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。
  • Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。

LME7As.png

package com.example.designpatterns.strategy;
import org.yaml.snakeyaml.DumperOptions;
/**
* @program: DesignPatterns
* @description: 策略模式
* @author: Coder_Pan
* @create: 2022-04-13 17:13
*
* 设计一个鸭子,它可以动态地改变叫声
* 这里的算法族是鸭子的叫声行为
**/
public class StrategyTest {
public static void main(String[] args) {
System.out.println("策略模式......");
Duck duck = new Duck();
duck.setQuackBehavior(new Squeak());
duck.performQuack();
/**
* 能动态地改变 Context 所使用的算法
*/
duck.setQuackBehavior(new Quack());
/**
* doSomething() 方法会调用 behavior()
*/
duck.performQuack();
}
}
/**
* 定义鸭子叫的接口
*/
interface QuackBehavior{
/**
* 鸭子叫声
*/
void quack();
}
/**
* 实现 ====> Behavior
*/
class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("quack!");
}
}
/**
* 实现 ====> Behavior
*/
class Squeak implements QuackBehavior{
@Override
public void quack() {
System.out.println("squeak!");
}
}
/**
* 定义一只鸭子
*/
class Duck {
private QuackBehavior quackBehavior;
/**
* doSomething() 方法会调用 behavior()
*/
public void performQuack() {
if (quackBehavior != null) {
quackBehavior.quack();
}
}
/**
* setStrategy(Strategy) 方法可以**动态**地改变 strategy 对象
* 能动态地改变 Context 所使用的算法
*
* @param quackBehavior
*/
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}

posted on   JavaCoderPan  阅读(14)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

统计

点击右上角即可分享
微信分享提示