设计模式之策略模式

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判断,但是为了后期方便维护,将策略封装成一个个的类,然后利用多态,去实现一个策略类的对象,可以根据传入的参数,选择对应的策略类对象,并调用对应的方法。

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

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

全部评论

相关推荐

12-19 22:04
武汉大学 Java
点赞 评论 收藏
分享
小万喜欢吃牛油:很多是多少,我不想被 误导了,简历没有什么大问题,如果只有几十家,投到一百多家再说吧
投递几十家公司,到现在0...
点赞 评论 收藏
分享
rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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