美文网首页
Android设计模式-策略模式

Android设计模式-策略模式

作者: 星宇V | 来源:发表于2019-10-30 15:10 被阅读0次

    UML关系简单介绍
    UML简单使用的介绍
    创建型设计模式
    Android设计模式-单例模式
    Android设计模式-工厂模式
    Android设计模式-抽象工厂模式
    Android设计模式-建造者模式
    Android设计模式-原型模式
    结构型设计模式
    Android设计模式-代理模式
    Android设计模式-装饰模式
    Android设计模式-适配器模式
    Android设计模式-组合模式
    Android设计模式-门面模式
    Android设计模式-桥接模式
    Android设计模式-享元模式
    行为型设计模式
    Android设计模式-策略模式
    Android设计模式-命令模式
    Android设计模式-责任链模式
    Android设计模式-模版方法模式
    Android设计模式-迭代器模式
    Android设计模式-观察者模式
    Android设计模式-备忘录模式
    Android设计模式-中介者模式
    Android设计模式-访问者模式
    Android设计模式-状态模式
    Android设计模式-解释器模式

    1.定义

    策略模式也叫政策模式。
    定义一组算法,将每个算法都封装起来,并且使他们之间都可以互换。
    策略模式使用的就是面向对象的继承和多态。

    2.策略模式UML图

    策略模式UML图

    角色介绍

    • Strategy 抽象策略角色 定义每个策略必须有的属性和方法
    • ConcreteStrategy 具体策略角色 实现抽象策略角色,有该策略的具体实现
    • Context 封装角色,也叫上下文角色,屏蔽高层模块对策略的直接访问,封装可能存在的变化。

    3.简单实现

    3.1 抽象策略角色

    public interface Strategy {
        void doSomething();
    }
    
    

    3.2 具体策略角色

    public class ConcreteStrategy1 implements Strategy {
        @Override
        public void doSomething() {
            System.out.println("具体策略1");
        }
    }
    
    
    public class ConcreteStrategy2 implements Strategy {
        @Override
        public void doSomething() {
            System.out.println("具体策略2");
        }
    }
    
    

    3.3 封装角色

    public class Context {
        private Strategy strategy;
    
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }
    
        public void doAnything(){
            this.strategy.doSomething();
        }
    }
    
    

    3.4 客户端调用

    public class MyClass {
        public static void main(String args[]) {
    
            Strategy strategy1=new ConcreteStrategy1();
            Strategy strategy2=new ConcreteStrategy2();
    
            Context context=new Context(strategy1);
            context.doAnything();
    
            System.out.println("-----------");
    
            context=new Context(strategy2);
            context.doAnything();
        }
    }
    
    
    打印结果为
    
    具体策略1
    -----------
    具体策略2
    
    

    ConcreteStrategy1 ConcreteStrategy2分别为两种具体的策略,就想算法里的加法和减法。通过封装角色的封装,在客户端调用的时候,只需要传入相应的策略到封装角色中,就可以调用其具体的实现方法。

    4.总结

    4.1优点

    • 策略算法可以自由切换,只要实现抽象,就可以通过传入封装角色中进行切换
    • 避免使用多重条件判断
    • 扩展性良好 增加一个策略非常简单,只需要实现抽象策略角色就行。

    4.2缺点

    • 每个策略对应一个策略类,类数量增加
    • 所有的策略类都需要对外暴露,否则客户端不晓得怎么传了。。。

    4.3应用场景

    • 多个类只有在算法或者行为上略有不同的场景。
    • 算法需要自由切换的场景
    • 需要屏蔽具体算法规则的场景

    相关文章

      网友评论

          本文标题:Android设计模式-策略模式

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