美文网首页
14_策略模式

14_策略模式

作者: 真是个点子王 | 来源:发表于2021-01-17 10:07 被阅读0次
    • 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。
    • 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
    • 策略模式里面有许多函数式编程的思想。

    结构

    • 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
    • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为
    • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

    实例

    // Strategy.java
    public interface Strategy {
        public void show();
    }
    
    // StrategyA.java
    public class StrategyA implements Strategy{
        @Override
        public void show() {
            System.out.println("买一送一");
        }
    }
    
    // SalesMan.java
    public class SalesMan {
    
        // 聚合策略类对象
        private Strategy strategy;
    
        public SalesMan(Strategy strategy) {
            this.strategy = strategy;
        }
    
        // 由促销员展示促销活动给普通用户
        public void salesManShow(){
            strategy.show();
        }
    }
    
    // Client.java
    public class Client {
        public static void main(String[] args) {
            SalesMan salesMan = new SalesMan(new StrategyA());
            salesMan.salesManShow();
            SalesMan salesMan1 = new SalesMan(new Strategy() {
                @Override
                public void show() {
                    System.out.println("明天不要钱");
                }
            });
            salesMan1.salesManShow();
        }
    }
    
    /*
    Output:
    买一送一
    明天不要钱
    */
    

    分析

    • 策略模式是函数式编程的一种体现。
    • Java的编码中,策略模式其实是很容易碰见的。比如在sort()中想要定制比较器规则所使用的Comparator接口或者Comparable接口都策略模式的体现;
    • 另外在并发编程中,通过实现Runnable接口中的run()方法,从而实现线程的业务逻辑的方法也属于策略模式。

    相关文章

      网友评论

          本文标题:14_策略模式

          本文链接:https://www.haomeiwen.com/subject/aujwaktx.html