美文网首页爱编程,爱生活
Java设计模式<策略模式>

Java设计模式<策略模式>

作者: 熬夜的猫头鹰 | 来源:发表于2018-06-16 15:01 被阅读11次

Java设计模式<策略模式>

意图

  • 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换

解决的问题

  • 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护

场景

  • 一个系统有许多许多类,而区分它们的只是他们直接的行为
  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
  • 一个系统需要动态地在几种算法中选择一种
  • 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

优点

  • 算法可以自由切换
  • 避免使用多重条件判断
  • 扩展性良好

Demo

现实场景中是进行签名的方法包括为Md5 RSA RSA2

创建签名接口

public interface  Sign {

    public String sign(String str);
}

实现类RSA

public class RSASign implements Sign{
    public String sign(String str) {
        System.err.println("using RSA to sign the string");
        return null;
    }
}

实现类RSA2

public class RSA2Sign implements Sign{
    public String sign(String str) {
        System.err.println("using RSA2 to sign the string");
        return null;
    }
}

MD5Sign

public class MD5Sign implements Sign {
    public String sign(String str) {
        System.err.println("using MD5 to sign the string");
        return null;
    }
}

创建上下文类

public class Context {

    private Sign strategy;

    public Context(Sign strategy) {
        this.strategy = strategy;
    }

    public Sign getStrategy() {
        return strategy;
    }

    public void setStrategy(Sign strategy) {
        this.strategy = strategy;
    }

    public String operate(String str){
    return this.getStrategy().sign(str);
    }

}

测试类DemoMain

public class DemoMain {
    public static void main(String[] args) {
        Context context = new Context(new MD5Sign());
        context.operate("Jeffy");
    }
}

输出

using MD5 to sign the string

相关文章

  • 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设计模式<组合模式>

    Java设计模式<组合模式> 意图 对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和...

  • Java设计模式<模板模式>

    Java设计模式<模板模式> 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改...

网友评论

    本文标题:Java设计模式<策略模式>

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