美文网首页爱编程,爱生活
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设计模式<策略模式>

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