设计模式之策略模式

UML类图

图片说明

初步理解

有多种策略,原本是在一个类中用if else实现,现在每一种策略都封装到类中。主要为了解决在有多种算法相似的情况下,使用 if...else 会比较复杂以及难以维护。

代码理解

底层接口

public interface Strategy {
    public int operation(int num1, int num2);
}

多个策略封装成类(3个)

public class Add implements Strategy{
    @Override
    public int operation(int num1, int num2) {
        return num1 + num2;
    }
}

public class Subtract implements Strategy{
    @Override
    public int operation(int num1, int num2) {
        return num1 - num2;
    }
}

public class Multiply implements Strategy{
    @Override
    public int operation(int num1, int num2) {
        return num1 * num2;
    }
}

策略类

里面直接附带一个接口属性。初始化时,通过传入的对象(多态),了解应该调用哪种策略。

public class Context {
    private Strategy strategy;
    //构造函数
    public Context(Strategy strategy){
        this.strategy = strategy;
    }

    public int selcect(int num1, int num2){
        return strategy.operation(num1, num2);
    }
}

测试方法

public class Demo {
    public static void main(String[] args) {
        Context context = new Context(new Add());
        System.out.println("10 + 5 = " + context.selcect(10, 5));

        context = new Context(new Subtract());
        System.out.println("10 - 5 = " + context.selcect(10, 5));

        context = new Context(new Multiply());
        System.out.println("10 * 5 = " + context.selcect(10, 5));
    }
}

测试结果

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

总结

三个策略本来可以放在一个类中,用逻辑if else判断,但是为了后期方便维护,将策略封装成一个个的类,然后利用多态,去实现一个策略类的对象,可以根据传入的参数,选择对应的策略类对象,并调用对应的方法。

初识设计模式 文章被收录于专栏

第一次学设计模式,学的不够透彻,但依旧有些心得值得做做笔记

全部评论

相关推荐

04-21 16:05
已编辑
山西大学 Java
不吃压力👿:我和你简历差不多,好多看到28就不回复了,回复的基本是全栈或低代码
点赞 评论 收藏
分享
03-29 18:59
运城学院 Java
程序员小白条:咱们要对自己的简历和学历有清晰的认知,不要动不动就大厂了....都26届了,没实习还想着大厂,唉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务