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

  • 相关阅读:
    Kafka副本管理—— 为何去掉replica.lag.max.messages参数
    Kafka0.8.2.1删除topic逻辑
    【原创】如何确定Kafka的分区数、key和consumer线程数
    【原创】Kafka console consumer源代码分析(二)
    QGIS源码解析和二次开发
    点云数据中的三维信息提取pcl
    Halcon10.0 + VS2010
    Halcon链接库
    python调用Opencv库和dlib库
    cvtColor
  • 原文地址:https://www.cnblogs.com/annkiny/p/12589431.html
Copyright © 2011-2022 走看看