• 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。更加的灵活

  • 相关阅读:
    user.table.column, table.column 或列说明无效
    spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务
    easyui-treegrid移除树节点出错
    jquery easyui easyui-treegrid 使用异步加载数据
    Java动态调用webService,axis2动态调用webService
    让IE支持Css3属性(圆角、阴影、渐变)
    float浮动之后高度自适应失效解决方案
    td中使用overflow:hidden; 无效解决方案
    jquery插件select2事件不起作用(select2-3.5.4)
    wsdl自动生成Java代码,根据wsdl生成Java代码
  • 原文地址:https://www.cnblogs.com/Krloypower/p/9961730.html
Copyright © 2020-2023  润新知