java策略模式实例解析

作者: Tifkingsly | 来源:发表于2018-06-10 01:05 被阅读19次

    1、策略模式概述:

    策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式。策略模式是一种行为型模式《设计模式的艺术》

    使用场景:

    策略模式常用于解决某一个问题,或者是实现某个功能时会存在多种实现方法,因而将每个方法进行一定的封装,由使用者决定使用哪种方法。

    2、策略模式UML类图:

    image.png

    Context(环境类):环境类作为策略的使用者,在实现某种功能时可以采取多种方法来实现。在环境类中维护一个策略类的引用,调用策略类的方法。
    Strategy(抽象策略类):作为策略类的公共父类,定义策略类的基础方法。
    ConcreteStrategy(具体策略类):实现抽象策略类中定义的公共接口,完成具体功能。

    3、策略模式示例:

    策略模式实现:
    /**
     * 视频播放器:环境类
     */
    public class MediaPlayer {
        
        private Decoder decoder;
    
        public void setDecoder(Decoder decoder) {
            this.decoder = decoder;
        }
        
        public void decodeVideo() {
            decoder.decodeVideo();
        }
    }
    /**
     * 抽象策略类
     */
    public abstract class Decoder {
    
        abstract void decodeVideo();
    }
    public class MediaCodecDecoder extends Decoder {
    
        @Override
        void decodeVideo() {
            System.out.println("this is MediaCodecDecoder");
        }
    }
    public class FfmpegDecoder extends Decoder {
        @Override
        void decodeVideo() {
            System.out.println("this is FfmpegDecoder");
        }
    }
    

    上面示例为一个视频播放器模块,由于播放器在解码的时候可以选择多种解码方法, 因此设计时采用策略模式。将每种解码方法封装成一个类,抽象出一个Decoder抽象类,定义解码的标准接口。播放器内部维护一个Decoder对象,根据当前码率以及平台决定使用哪种解码方式。

    4、优缺点分析:

    优点:

    1)策略模式完美体现类开闭原则,扩展性非常好;
    2)使用策略模式与状态模式有个共同有点,避免大量判断逻辑代码;

    缺点:

    1)客户端需要知道所有策略类,自行决定使用哪一种策略;
    2)当有新策略产生时需要增加一个策略类,导致系统的类会越来复杂;

    结束语

    策略模式只适用于一个问题对应多种解决方案的场景,如果不满足次条件不要滥用。相对来说,策略模式理解很简单。

    相关文章

      网友评论

        本文标题:java策略模式实例解析

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