• 设计模式——简单说(策略模式)


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

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

    关键:妙计,锦囊, 使用

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

    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、所有的策略接口要对外暴露(可以用工厂方法、代理模式或享元模式来修正)

  • 相关阅读:
    Apache Druid 的集群设计与工作流程
    跨越算法开篇
    十分钟了解Apache Druid(集数据仓库、时间序列、全文检索于一体的存储方案)
    时间序列数据库(TSDB)初识与选择(InfluxDB、OpenTSDB、Druid、Elasticsearch对比)
    C#多线程(6):线程通知
    C#多线程(5):资源池限制
    C#多线程(4):进程同步Mutex类
    C#多线程系列(3):原子操作
    C#多线程系列(2):多线程锁lock和Monitor
    C#多线程系列(1):Thread
  • 原文地址:https://www.cnblogs.com/annkiny/p/12589431.html
Copyright © 2020-2023  润新知