zoukankan      html  css  js  c++  java
  • 设计模式——简单说(策略模式)

    策略模式其实很好理解,我们讲一个通俗易懂的举例。

    三国时期,诸葛亮是个高人,可以给一些锦囊妙计,让某人在特定的时候打开使用。

    关键:妙计,锦囊, 使用

    妙计共有的特点就是可以打开看,定义一个接口。

    public interface IStrategy {
        void operate();
    }

    接下来可以可以装妙计了,来2个妙计

    public class StrategyOne implements IStrategy {
    
        @Override
        public void operate() {
             System.out.println("妙计1:今天不要出门。");
        }
    
    }
    
    public class StrategyTwo implements IStrategy {
    
        @Override
        public void operate() {
            System.out.println("妙计2:出门记得带上口罩。");
         //实际的运用中,这里可能是非常复杂的算法 } }

    有了2个妙计了,我们就放在一个地方吧——锦囊

    public class Context {
         private IStrategy strategy;
         public Context(IStrategy strategy) {
             this.strategy = strategy;
         }
         
         public void operate() {
             this.strategy.operate();
         }
    }

    接下来让阿斗来获得并使用妙计

    public class Adou {
    
        public static void main(String[] args) {
            Context context;
            System.out.println("我拿到第一个妙计了,迅速打开查看:");
            // 拿到第一个妙计
            context = new Context(new StrategyOne());
            // 看看妙计
            context.operate();
            System.out.println("第一个妙计可能不行,找到第二个妙计查看:");
            // 拿到第二个妙计
            context = new Context(new StrategyTwo());
            context.operate();
        }
    
    }
    运行结果:
    我拿到第一个妙计了,迅速打开查看: 妙计1:今天不要出门。 第一个妙计可能不行,找到第二个妙计查看: 妙计2:出门记得带上口罩。

    策略模式的优点:

    1、算法自由切换

    2、避免使用多重条件判断

    3、扩展性好

    缺点:

    1、类的数量增加

    2、所有的策略接口要对外暴露(可以用工厂方法、代理模式或享元模式来修正)

  • 相关阅读:
    设置 nextjs build 时,忽略 page 目录下相关文件
    Resource Override 之调试线上 js
    nodejs npm 基础命令
    禁止选择或禁止复制网页数据
    对上传的图片进行格式校验以及安全性校验
    docker 设置阿里云镜像加速
    JS 格式化输出时间
    dotnet core 实现 IActionResult
    win10 visual studio 设置默认管理员权限启动
    Windows 环境部署 RabbitMQ
  • 原文地址:https://www.cnblogs.com/annkiny/p/12589431.html
Copyright © 2011-2022 走看看