zoukankan      html  css  js  c++  java
  • Java设计模式从精通到入门三 策略模式

    介绍

    我尽量用最少的语言解释总结:

    Java23种设计模式之一,属于行为型模式。一个类的行为或者算法可以在运行时更改,策略对象改变context对象执行算法。
    

    应用实例:

    ​ 以周瑜赔了夫人又折兵的例子。

    uml类图如下

    主要代码如下

    策略接口

    /**
     * @ClassName Stragety
     * @Description 策略抽象类
     * @Author ouyangkang
     * @Date 2018-11-15 09:06
     **/
    public interface Stragety {
    
        void operation();
    }
    

    策略接口实现类

    /**
     * @ClassName BackDoorStragety
     * @Description 乔国老开后门
     * @Author ouyangkang
     * @Date 2018-11-15 09:14
     **/
    public class BackDoorStragety implements Stragety {
    
        @Override
        public void operation() {
            System.out.println("拜访乔国老,请求开后门");
        }
    }
    
    /**
     * @ClassName GreenLightStragety
     * @Description 吴国太开绿灯
     * @Author ouyangkang
     * @Date 2018-11-15 09:16
     **/
    public class GreenLightStragety implements Stragety {
        @Override
        public void operation() {
            System.out.println("拜访吴国太,请求开绿灯");
        }
    }
    
    
    
    /**
     * @ClassName PostBreakStragety
     * @Description 孙夫人断后
     * @Author ouyangkang
     * @Date 2018-11-15 09:18
     **/
    public class PostBreakStragety implements Stragety {
        @Override
        public void operation() {
            System.out.println("拜访孙夫人,请求断后");
        }
    }
    

    context类

    
    /**
     * @ClassName Context
     * @Description 策略执行
     * @Author ouyangkang
     * @Date 2018-11-15 09:18
     **/
    public class Context {
    
        private Stragety stragety;
    
        public Context(Stragety stragety){
            this.stragety = stragety;
        }
    
        public void operation(){
            this.stragety.operation();
        }
    }
    

    main

    
    /**
     * @ClassName Main
     * @Description TODO
     * @Author ouyangkang
     * @Date 2018/9/25 11:22
     **/
    public class Main {
    
        public static void main(String[] args) {
            System.out.println("去往吴国, 刘备慌得一匹,赵云打开第一个锦囊");
            Context backDoor = new Context(new BackDoorStragety());
            backDoor.operation();
    
            System.out.println("--------------");
    
            System.out.println("刘备在吴国还不是美滋滋,美酒,美人, 赵云打开第二个锦囊");
            Context greenLight = new Context(new GreenLightStragety());
            greenLight.operation();
    
            System.out.println("--------------");
    
            System.out.println("准备撤了,赵云打开第三个精囊");
            Context postBreak = new Context(new PostBreakStragety());
            postBreak.operation();
    
            System.out.println("诸葛亮气死周瑜");
        }
    }
    

    执行结果:

    去往吴国, 刘备慌得一匹,赵云打开第一个锦囊
    拜访乔国老,请求开后门
    --------------
    刘备在吴国还不是美滋滋,美酒,美人, 赵云打开第二个锦囊
    拜访吴国太,请求开绿灯
    --------------
    准备撤了,赵云打开第三个精囊
    拜访孙夫人,请求断后
    诸葛亮气死周瑜
    
    

    总结

    可以用策略模式代替过多的if else。更加的灵活

  • 相关阅读:
    数据结构与算法之PHP实现二叉树的遍历
    数据结构与算法之二叉树的基本概念和类型
    聚集索引,非聚集索引,覆盖索引 原理
    Vue学习笔记:methods、computed、watch的区别
    xsl 和xml transform方法的调用
    Chrome , Firfox 不支持fireEvent的方法
    分布式存储
    firefox并不支持selectSingleNode和selectNodes的解决方法
    503 Service Unavailable
    处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
  • 原文地址:https://www.cnblogs.com/Krloypower/p/9961730.html
Copyright © 2011-2022 走看看