(十三)策略模式

策略图案限定了多个封装算法,该算法可以相互替换包。法的客户。借用还有一位大神的样例。

interface ICalculator{public int calculate(String exp);
}
abstract class AbstractCalculator{public int[] split(String exp,String opt){String array[] = exp.split(opt);int arrayInt[] = new int[2];arrayInt[0] = Integer.parseInt(array[0]);arrayInt[1] = Integer.parseInt(array[1]);return arrayInt;}
}
class Plus extends AbstractCalculator implements ICalculator{public int calculate(String exp){int arrayInt[] = split(exp, "\\+");return arrayInt[0]+arrayInt[1];}
}
class Minus extends AbstractCalculator implements ICalculator{public int calculate(String exp){int arrayInt[] = split(exp,"-");return arrayInt[0] = arrayInt[1];}
}
class Multiply extends AbstractCalculator implements ICalculator{public int calculate(String exp){int arrayInt[] = split(exp,"\\*");return arrayInt[0] * arrayInt[1];}
}
public class Strategy {public static void main(String[] args){String exp = "2*8";ICalculator cal = new Multiply();System.out.println(cal.calculate(exp));}
}

系统提供不同算法的实现。对于各种算法封装好,用户决定使用哪个算法。策略模式多使用在算法决策系统中。比如电子商务价格算法。跟抽象类非常相似,我感觉。

(十四)模板方法模式

模板方法的意义是一个父类方法提供大部分的算法,子类完毕剩余的算法。父类调用子类的实现。

abstract class TemplateCalc{//主方法public final int calculate(String exp,String opt){int array[] = split(exp,opt);return calculate(array[0],array[1]);}public int[] split(String exp,String opt){String array[] = exp.split(opt);int arrayInt[] = new int[2];arrayInt[0] = Integer.parseInt(array[0]);arrayInt[1] = Integer.parseInt(array[1]);return arrayInt;}abstract public int calculate(int num1,int num2);
}
class PlusTemp extends TemplateCalc{public int calculate(int num1,int num2){return num1 + num2;}
}
public class Template{public static void main(String[] args){TemplateCalc tem = new PlusTemp();System.out.println(tem.calculate("12*23", "\\*"));}
}

将一个子类初始化,调用父类的 calculate 方法。父类运行完分解,调用子类的相加,事实上 * 这并不意味着乘法,只是一个象征分裂。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/mfrbuaa/p/4609800.html

Java设计模式(七)策略模式 模板模式相关推荐

  1. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  2. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  3. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...

  4. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  5. Java设计模式之策略模式+工厂模式+模板模式

    Java设计模式之策略模式+工厂模式+模板模式 1.策略模式+工厂模式+模板模式 个人的理解:实际开发工程中,一些业务很复杂的逻辑使用很多的 if 或者 if···else 语句,不利于维护和扩展,为 ...

  6. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  7. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  8. 设计模式之策略模式+工厂模式+模板模式结合

    设计模式之策略模式+模板模式 为什么总是学不好设计模式 从"登录功能"中发现问题. 首先我们简单的了解功能需求: 于是你开始干活了: 1.控制层代码如下,根据不同的登录方式调用不同 ...

  9. Java设计模式之策略模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  10. 【Java设计模式】简单学访问者模式——我的选择是,Yes

    目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...

最新文章

  1. Arc Engine 中添加气泡提示框
  2. 深入源码 UITableView 复用技术原理分析
  3. hibernate官方新手教程 (转载)
  4. Excel公式扫盲——SUMPRODUCT 函数
  5. 利用路由器端口映射远程连接
  6. 五大软件设计原则学习笔记5——依赖倒置原则
  7. 使用ASP.NET核心应用程序实现存储库模式和工作单元的指南
  8. SQL Server着眼于非数字数据类型
  9. Bailian2753 菲波那契数列(POJ NOI0202-1755)【数列+记忆化递归】
  10. Angularjs-项目搭建
  11. c# list转为json_C#中List集合转换JSON
  12. Mahony 互补滤波算法
  13. 如何用Python快速优雅的批量修改Word文档样式?
  14. 在vue项目中使用echarts 阿星小栈
  15. 北京社保卡和医疗存折(萌新看)
  16. Axure 元件库-原型
  17. Kafka对Java程序员有多重要?连阿里都再用它处理亿万级数据统计
  18. php 星盘代码,爱星盘SDK开发接口说明
  19. CS231n作业2中Cython相关问题的处理
  20. 《Python语言程序设计》王恺 王志 机械工业出版社 第八章 多线程与多进程 课后习题答案

热门文章

  1. python中的for循环
  2. 干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案
  3. Spring Validation 最佳实践及其实现原理,参数校验没那么简单!
  4. 面试官,你考我那么多基础知识干什么?
  5. 持续集成工具Jenkins看这篇就够啦!
  6. 全面对比 Redis 和 Memcached 的 6 点区别
  7. spring 学习—spring 的ioc底层原理(03)
  8. 计算机主机安装系统安装系统,系统重装
  9. 微信小程序点播插件_小程序云直播amp;云点播插件限时降价了!!!
  10. 成功解决Exception “unhandled ImportError“cannot import name ‘imresize‘ from ‘imageio‘