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

java设计模式------策略模式

作者: 我弟是个程序员 | 来源:发表于2017-08-13 11:16 被阅读0次

该模式是与具体的项目业务无关的设计模式

先看图:


策略模式图

定义:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化。
策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。


假设需求:我们现在需要一个图片加载框架,我们可以选择Glide、Fresco、ImageLoader、Picasso其中的一个,比如选择ImageLoader实现了图片加载,正当我们美滋滋地实现了这个功能的时候,突然有一天Boss让你把加载框架换成Glide,如果很多类都去调用了ImageLoader,那么就得一个一个地去替换,替换到怀疑人生,如果之前使用到策略模式,那么替换过程将会变得非常简单。

抽象策略角色:

public interface Strategy {
    void showImage();
}

具体策略角色:

//Glide
public class GlideStrategy implements Strategy{
    @Override
    public void showImage() {
        System.out.println("Glide ShowImage");
    }
}

//Fresco
public class FrescoStrategy implements Strategy {

    @Override
    public void showImage() {
        System.out.println("Fresco ShowImage");
    }
}

//ImageLoader
public class ImageLoaderStrategy implements Strategy {

    @Override
    public void showImage() {
        System.out.println("ImageLoader ShowImage");
    }

}

//Picasso
public class PicassoStrategy implements Strategy {
    @Override
    public void showImage() {
        System.out.println("Picasso ShowImage");
    }
}

环境角色:

public class Context {

    Strategy strategy;

    private Context() {
        //在这里切换让谁去加载图片
        // strategy = new GlideStrategy();
        // strategy = new PicassoStrategy();
        // strategy = new FrescoStrategy();
        strategy = new ImageLoaderStrategy();
    }

    public void loadImage() {
        strategy.showImage();
    }

    public static Context getInstance() {
        return InnerClass.context;
    }

    private static final class InnerClass {
        private static Context context = new Context();
    }
}

最后可以直接这么调用:

Context.getInstance().loadImage();

适用场景:
有几种相似的行为,或者说算法,客户端需要动态地决定使用哪一种,那么可以使用策略模式,将这些算法封装起来供客户端调用。

相关文章

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • Java 常用设计模式简例

    简述Java常用设计模式 简述Java常用设计模式及设计原则 strate---------策略模式针对接口编程,...

  • 策略模式

    参考资料:漫话:如何给女朋友解释什么是策略模式? 设计模式之策略模式(实例+Demo) Java设计模式(8)——...

  • 学习Head First设计模式Day1

    Java设计模式之设计模式 策略模式:策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此设计模式让算法...

网友评论

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

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