美文网首页
策略模式

策略模式

作者: 南谭一隅 | 来源:发表于2018-11-21 11:22 被阅读0次

    一、定义

    定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 --- 《设计模式》

    二、适用性

    1、一些类只是行为不同,其他的是相同的。
    2、需要使用一个算法的不同变体。
    3、算法使用到了客户不应该知道的数据。
    4、一个类中定义了多种行为,且这些行为在这个类的操作中以多个条件语句的形式出现。

    三、代码实现

    1、定义一个策略接口

    package com.hqzmss.strategy;
    
    public interface Strategy {
        void print();
    }
    

    2、定义两个具体策略

    package com.hqzmss.strategy;
    
    public class ConcreteStrategyOne implements Strategy {
        public void print() {
            System.out.println("打印一行");
        }
    }
    
    package com.hqzmss.strategy;
    
    public class ConcreteStrategyTwo implements Strategy{
        public void print() {
            System.out.println("打印两行");
        }
    }
    

    3、定义上下文

    package com.hqzmss.strategy;
    
    public class Context {
        private Strategy strategy;
    
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }
    
        public void print() {
            this.strategy.print();
        }
    }
    

    4、测试类

    package com.hqzmss.strategy;
    
    public class TestClass {
        public static void main(String[] args) {
            //  这里的构造方法中传入一个具体策略
            Context context = new Context(new ConcreteStrategyTwo());
            context.print();
        }
    }
    

    四、优点

    1、可以析取出算法中的公共功能
    2、替代继承方法
    3、消除条件语句
    4、实现同一行为不同的算法选择

    五、缺点

    1、客户必须了解具体的策略实现,才好选择
    2、Strategy跟Context之间的通信开销
    3、增加了对象的数目

    六、专业术语

    1、Strategy:策略
    2、ConcreteStrategy:具体策略
    3、Context:上下文

    相关文章

      网友评论

          本文标题:策略模式

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