Java设计模式(七)策略模式 模板模式
(十三)策略模式
策略图案限定了多个封装算法,该算法可以相互替换包。法的客户。借用还有一位大神的样例。
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 方法。父类运行完分解,调用子类的相加,事实上 * 这并不意味着乘法,只是一个象征分裂。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Java设计模式(七)策略模式 模板模式的更多相关文章
- Java设计模式(13)模板模式(Template模式)
Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: pu ...
- java设计模式(三)模板模式
抽象类中公开定义了执行它的方法的方式,子类可以按需求重写方法实现,但调用将以抽象类中定义的方式进行,典型应用如银行办理业务流程.冲泡饮料流程.下面给出简单例子,用沸水冲泡饮料,分为四步:将水煮沸.泡制 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- Java设计模式(21)访问模式(Visitor者模式)
Visitor定义:作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元 ...
- Java设计模式(19)状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式 State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If else ...
- Java设计模式(17)解释器模式(Interpreter模式)
Interpreter定义:定义语言的文法,并且建立一个解释器来解释该语言中的句子. Interpreter似乎使用面不是很广,它描述了一个语言解释器是如何构成的,在实际应用中,我们可能很少去构造一个 ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- Java设计模式(15)备忘录模式(Memento模式)
Memento定义:memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态. Memento模式相对也比较好理解,我们看下列代码: public class ...
- Java设计模式(12)迭代模式(Iterator模式)
上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...
- Java设计模式(11)外观模式(Facade模式)
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { C ...
随机推荐
- RabbitMQ与java、Spring结合实例详细讲解(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了rabbitMq,提供了如何在Ubuntu下安装RabbitMQ 服务的方法. ...
- 写一个程序,乞讨1+2*2+3*3+n*n值 Java
public static void main(String[] args) { // 1*1+2*2+3*3+n*n int n = 40; // 1 ...
- PC2日记——坑爹的第一天2014/08/28
我不想安慰自己说今天是因为第一次将pc2用于实际的比赛经验不足而导致的今天出现种种问题,我想说的是自从我開始干后台我所做的每一件事都是第一次,所以这绝对不是让自己免去责怪的理由:我想说的是假设我今天是 ...
- 搭建SSH
搭建SSH详细步骤及相关说明 因为手里已有相关jar,为方便我搭建的是:Struts2.0+Hibernate3.3+Spring3.0,数据库:MySQL 如果想搭建最新的,在官网上下载最新ja ...
- Java AIO 入门实例(转)
Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: public class SimpleServer { public SimpleServer(int port ...
- Velocity脚本新手教程
从网络下的数据汇编 一.Velocity简介 Velocity它是Apache该公司的开源产品,它是一套基于Java语言模板引擎,背景可以非常灵活的数据与模板文件一起反对.他直言不讳地说:,人使用模板 ...
- 开源 自由 java CMS - FreeCMS1.9 评论管理
项目地址:http://code.google.com/p/freecms/ 评论管理 1. 评论管理 从左側管理菜单点击评论管理进入. 2. 评论审核 选择须要审核的评论,然后点击"审核& ...
- iOS 9 新特性
这篇文章介绍了iOS9开发相关的简介,现在发布的设备都会搭载iOS9.这篇文章也列出了详细描述新特性的文章. iPad多线程增强 iOS9使用Slider Over, Split View, Pict ...
- Oracle 11G DataGuard生产环境又一次启动具体过程
场景,重新启动数据库,不重新启动linux系统,所以不用考虑监听程序,#linux输入lsnrctl start1 数据库关闭1.1 关闭主库SHUTDOWN IMMEDIATE; SQL> ...
- c++输入密码以星号代替
#include <iostream> #include <string>//注意这里的头文件! #include<conio.h> using namespace ...