(十三)策略模式
策略图案限定了多个封装算法,该算法可以相互替换包。法的客户。借用还有一位大神的样例。
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 ...
随机推荐
-
Linux下PS1、PS2、PS3、PS4使用详解
参考印象笔记:
-
C# Json数据反序列化为Dictionary并根据关键字获取指定值
Json数据: { "dataSet": { "header": { "returnCode": "0", " ...
-
ImageButton自定义按钮的按下效果的高效实现方法(非一般)
通常情况下,我们可以采用如下方式实现: <?xml version="1.0" encoding="UTF-8"?> <selector xm ...
-
Java反射举例
本文參考:http://www.cnblogs.com/yydcdut/p/3845430.html 1.Java反射的基本介绍 Java的反射很强大,传递class. 能够动态的生成该类.取得这个类 ...
-
初步STL集装箱List
List 特点: 1.它实质上是一个双向链表 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3hpYW9idXB0/font/5a6L5L2T/f ...
-
RabbitMQ系列(四)RabbitMQ事务和Confirm发送方消息确认——深入解读
RabbitMQ事务和Confirm发送方消息确认--深入解读 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器 ...
-
golang byte与rune区别
先看代码 package main import ( "fmt" ) func main() { var a = "hello world" var b = & ...
-
am335x Qt SocketCAN Demo hacking
/*********************************************************************************** * am335x Qt Soc ...
-
Eclipse导入MyEclipse项目遇到问题解答
导入一个其他IDE中的项目,第一一定要想到:不同IDE中的配置文件问题: 比如:tomcat启动寻找项目的根目录问题,Eclipse的webContext,Myeclipse的是Webroot文件夹, ...
-
struts1.3.10 和 hibernate 3.3.2 一起加载时 出现javax.servlet.ServletException: java.lang.NoSuchMethodError: antlr.collections.A 错误
struts1.3.10 需要导入一个 antlr-2.7.2.jar 的jar包: hibernate 3.3.2 需要导入一个 antlr-2.7.6.jar 的jar包,这两个包有冲突,所以需要 ...