• 【设计模式】策略模式


    使用频率:★★★★☆

    什么是策略模式

    对象的行为,在不同的环境下,有不同的实现;

    比如人的上班行为,在不同的环境下,可以选择走路上班或者开车上班,由客户端根据情况决定采用何种策略;

    补充说明

    符合“开闭原则”,可以在不修改原有代码的基础上替换、添加新的策略;

    不同的策略可以相互替换;

    客户端自己决定在什么情况下使用什么具体策略角色;

    与状态模式区别:使用策略模式时,客户端手动选择策略,使用状态模式时,其行为是根据状态是自动切换的。

    角色

    抽象策略

    具体策略

    环境

    例子,JAVA实现

    例子描述:人上班,使用步行或者开车上班;

    策略:步行上班、开车上班...

    关系图

    抽象策略接口

    package com.pichen.dp.behavioralpattern.strategy;
    
    public interface IStrategy {
    
        public void execute();
    }

    具体策略

    package com.pichen.dp.behavioralpattern.strategy;
    
    public class DriveStrategy implements IStrategy{
    
        /**
         * @see com.pichen.dp.behavioralpattern.strategy.IStrategy#execute()
         */
        @Override
        public void execute() {
            System.out.println("driving。。。");
        }
    
    }
    package com.pichen.dp.behavioralpattern.strategy;
    
    public class WalkStrategy implements IStrategy{
    
        /**
         * @see com.pichen.dp.behavioralpattern.strategy.IStrategy#execute()
         */
        @Override
        public void execute() {
            System.out.println("walking。。。");
        }
    
    }

    环境

    package com.pichen.dp.behavioralpattern.strategy;
    
    public class Context {
    
        IStrategy strategy;
        
        public Context(IStrategy strategy) {
            this.strategy = strategy;
        }
        
        public void execute() {
            this.strategy.execute();
        }
    }

    客户端

    package com.pichen.dp.behavioralpattern.strategy;
    
    public class Main {
        public static void main(String[] args) {
            Context context = null;
            context = new Context(new WalkStrategy());
            context.execute();
            context = new Context(new DriveStrategy());
            context.execute();
        }
    }

    结果打印

    walking。。。
    driving。。。

     JDK中的示例,Collections.sort方法

    不需为新的对象修改sort()方法,你需要做的仅仅是实现你自己的Comparator接口:

            Collections.sort(
                list,   //待排序的集合
                new Comparator<>(){  //具体排序策略
                @Override  
                public int compare(A a1, A a2) {  
                    return ; //具体大小判断规则 
                }  
            });  
  • 相关阅读:
    游戏方案
    团队介绍
    【面向对象程序设计】作业四
    FIFO与LRU实现(Java)
    spring事务介绍
    微信抢红包算法
    Hibernate Dao映射配置通用接口类反射获取加载calass实例
    股票两次买卖最大收益(java)
    Eclipse安装JD-Eclipse反编译插件看源码
    Java GC调优
  • 原文地址:https://www.cnblogs.com/chenpi/p/5215862.html
Copyright © 2020-2023  润新知