Java策略模式及代码

使用场景:

  • 策略模式建议找出负责用许多不同方式完成特定任务的类, 然后将其中的算法抽取到一组被称为策略的独立类中。
  • 名为上下文的原始类必须包含一个成员变量来存储对于每种策略的引用。 上下文并不执行任务, 而是将工作委派给已连接的策略对象。
  • 上下文不负责选择符合任务需要的算法------客户端会将所需策略传递给上下文。

》》》实现行为类的组合替换。

策略模式代码

定义飞的行为类

复制代码
public interface FlyBehavior {
    public void fly();
}

public class FlyWithWings implements FlyBehavior{
    @Override
    public void fly() {
        System.out.println("用翅膀飞");
    }
}

public class FlyNoWay implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("不会飞");
    }
}

定义叫的行为类

复制代码
public interface QuackBehaivor {
    public void quack();
}

public class Quack implements QuackBehaivor {
    @Override
    public void quack() {
        System.out.println("呱呱叫");
    }
}

public class MuteQuack implements QuackBehaivor {
    @Override
    public void quack() {
        System.out.println("不会叫");
    }
}

定义上下文对象超类,鸭子类

复制代码
public abstract class Duck {

   FlyBehavior flyBehavior;
   QuackBehaivor quackBehavior;
   
   public abstract void display();
   
   public void performFly() {
       flyBehavior.fly();
   }
   
   public void performQuack() {
       quackBehavior.quack();
   }
   
   public void swim() {
       System.out.println("所有的鸭子都会漂浮");
   }

   // 动态设置飞行行为
   public void setFlyBehavior(FlyBehavior flyBehavior) {
       this.flyBehavior = flyBehavior;
   }

   //动态设置叫的行为
   public void setQuackBehavior(QuackBehaivor quackBehavior) {
       this.quackBehavior = quackBehavior;
   }
}

定义鸭子实现类

复制代码
public class MallardDuck extends Duck {
    @Override
    public void display() {
        System.out.println("我是绿头鸭");
    }
}

启动类demo

复制代码
public class MiniDuckSimulator {
    
    public static void main(String []args) {
        Duck mallard = new MallardDuck();
        mallard.setFlyBehavior(new FlyWithWings());//用翅膀飞
        mallard.setQuackBehavior(new Quack());//呱呱叫
        
        mallard.performFly();
        mallard.performQuack();
    }
}
相关推荐
weixin_462446231 天前
【原创实践】python版playwright截取多个图
开发语言·python·策略模式
MC丶科2 天前
Java设计模式漫画英雄宇宙之策略模式:从支付系统重构到软考高频考点(附完整代码 + 面试高频问法)
java·设计模式·重构·策略模式
benxin12342 天前
macOS 上使用 Homebrew 安装和配置 PostgreSQL 的详细步骤
macos·postgresql·策略模式
佛祖让我来巡山5 天前
设计模式深度解析:策略模式、责任链模式与模板模式
设计模式·责任链模式·策略模式·模版模式
王柏龙7 天前
Win11 无法找到本地组策略编辑器的解决方法
windows·策略模式
hai-chu8 天前
将 Neo4j 安装为 macOS 服务
macos·策略模式·neo4j
6***x54510 天前
Java设计模式之策略模式
java·设计模式·策略模式
miss_you121310 天前
策略模式 + 模板方法 + 注册式工厂 统一设计方案(营销优惠场景示例)
设计模式·工厂方法模式·策略模式·模板方法模式
章鱼哥73010 天前
Java 策略模式 + 聚合对象:实现多模块的统计与聚合,快速扩展的实战
java·开发语言·策略模式
大佬,救命!!!11 天前
C++函数式策略模式代码练习
开发语言·c++·学习笔记·学习方法·策略模式·迭代加深·多文件编译