专栏首页低调小熊猫经典设计模式(一):策略模式

经典设计模式(一):策略模式

简介

写出可维护、可复用、可扩展及灵活的代码是我们的目的,也是学习设计模式的理由,这句话是他娘的复制的,为什么要学设计模式,设计模式是什么,还是去百度一下吧,我就不装13了,这只是我的学习笔记,非教程

这里我举一个计算器的例子

我会创建一个计算接口,接口实现加法,减法这两个类,再创建一个计算器类(设置计算方法,返回值),最后创建一个test类测试

计算接口

public interface Operation {
    public int doOperation(int number1,int number2);
}

` 接口实现加法,减法这两个类

public class OperationAdd implements Operation {
    @Override
    public int doOperation(int number1, int number2) {
        return number1+number2;
    }
}

public class OperationSub implements Operation {
    @Override
    public int doOperation(int number1, int number2) {
        return number1-number2;
    }
}

` 再创建一个计算器类(设置计算方法,返回值)

public class Cal {
    private Operation operation;

    public void setOperation(Operation operation){
        this.operation=operation;
    }
    public int doOperation(int number1,int number2){
        return this.operation.doOperation(number1,number2);
    }
}

` 最后创建一个test类测试

/**
 * @program:hope
 * @author:aodeng
 * @blog:低调小熊猫(https://aodeng.cc)
 * @微信公众号:低调小熊猫
 * @create:2018-11-08 20:40
 **/
public class TestController {
    private static final Logger log= LoggerFactory.getLogger(TestController.class);
    public static void main(String[] args) {
        Cal cal=new Cal();
        //使用加法
        cal.setOperation(new OperationAdd());
        //输出结果
        log.info("[计算器加]-[{}]",cal.doOperation(4,2));

        //使用减法
        cal.setOperation(new OperationSub());
        //输出结果
        log.info("[计算器减]-[{}]",cal.doOperation(4,2));
    }
}

` 运行效果

"C:\Program Files\Java\jdk1.8\bin\java" com.hope.test.TestController
20:44:33.994 [main] INFO com.hope.test.TestController - [计算器加]-[6]
20:44:34.012 [main] INFO com.hope.test.TestController - [计算器减]-[2]

Process finished with exit code 0

`

忘了在哪里看的一句话,设计模式的基本原则:开闭原则。 意思就是:对修改关闭、对扩展开放

我们的计算器算和接口算是修改关闭的了,如果要扩展其他算法,乘,除,只需要实现计算接口,然后调用计算器的setOption(new 扩展的接口)就行了,这样我们程序,扩展性就非常强大了。

以下是我看教程的时候的一段话,我直接copy过来一下(哥认为最后一句话是重点,圈起来): 优点 已经十分明显了,那就是遵循了开闭原则,扩展性良好。

缺点 随着你的策略增加,你的类也会越来越多。 所有的策略类都要暴露出去,所以如果你在实际开发中使用了策略模式,一定要记得写好文档让你的伙伴们知道已有哪些策略。就像 shiro 默认提供了三种验证策略,就必须在文档中写清楚,否则我们根本不知道如何使用。

当然,权衡利弊,跟优点比起来,这些缺点都不算事儿。

源码

https://github.com/java-aodeng/hope

本文分享自微信公众号 - 低调小熊猫(Mr_AoDeng),作者:aodeng

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java中的万能实体类

    低调小熊猫
  • 经典设计模式(三):抽象工厂模式

    本来不想写这篇文章的,应该是不想写工厂模式,因为基本大家都会,不过今天看到一个老铁的博客,https://www.yuxuan66.com/16 关于抽象模式的...

    低调小熊猫
  • 设计模式之模板方法模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决...

    低调小熊猫
  • Android 之游戏开发流程

    一、概述 刚开始接触Android平台,之前也没有游戏开发经验,因此对于如何开发一款游戏没有思路,而且也不知道如何对整个项目进行模块划分。在学习连连看的教程时,...

    一灰灰blog
  • Java 接口

    但如果三角形类不需要draw()方法,只能去掉图形类中的draw()或把draw()变成图形类私有

    用户2965768
  • 温故而知新:设计模式之抽象工厂(AbstractFactory)

    抽象工厂主要用来解决多个系列的对象实例问题。 问题的应用场景(来源于李建忠老师的webcast讲座): 如果有一款游戏,里面有"道路,房屋,隧道,丛林"这四类基...

    菩提树下的杨过
  • 温故而知新:设计模式之Builder

    Builder模式主要用于以下场景: 需要创建一个较复杂的大对象实例,并且构成该对象的子对象可能经常会发生变化,但是组成大对象的算法却相对稳定。 比如:我们做b...

    菩提树下的杨过
  • Hadoop源码分析:Writable接口和WritableComparable接口

    1、 Writable接口 由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化。Hadoop并没有采用Java的序列化,而...

    程裕强
  • Java 数学操作类

    Mirror王宇阳
  • 桥接模式

    概述 当一个抽象对象可能有多个 实现时,通常用继承来协调他们。抽象类定义对该抽象的接口,而具体的子类则用不同的方式来实现。但是此方法有时候不太灵活。继承机制将抽...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券