java模式之策略模式&模板模式 以及策略模式与模板模式的区别
来源:互联网 发布:电脑视频剪辑软件推荐 编辑:程序博客网 时间:2024/05/18 00:11
例子:比如做的文档发布功能,它能够上传发布多种类型的文档,但是每一种文档处理的逻辑都不一样,这个时候它就可以提供多种文档转换处理类型,
根据用户发布的文档选择不同类型的转换器处理即可。
需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数
1.抽象接口
package com.sj.strategy;public interface Process {public void process();}
2.抽象的类, 可以提供一些公共逻辑方法
package com.sj.strategy;public abstract class AbstractProcess implements Process {public void commonMethod() {System.out.println("this is common method");}}
3.以下为对应的逻辑处理类 处理 html格式转换的
package com.sj.strategy;public class HtmlProcess extends AbstractProcess implements Process{@Overridepublic void process() {System.out.println("this is html process ");}}
4.以下为对应的逻辑处理类 处理 pdf格式转换的
package com.sj.strategy;public class PdfProcess extends AbstractProcess implements Process {@Overridepublic void process() {System.out.println("this is pdf process ");}}
5.以下为对应的逻辑处理类 处理 text格式转换的
package com.sj.strategy;public class TxtProcess extends AbstractProcess implements Process {@Overridepublic void process() {System.out.println("this is txt process ");}}
以下为模板模式
模板模式:简单理解就是抽象父类调用子类的方法;我们可以在抽象的父类中定义N个方法,但是子类可以依据自己的逻辑重写父类的方法,然后通过父类调用子类的方法。它的代理结构几乎与策略模式一样,可以这里理解;
package com.sj.template;public abstract class AbstractCalculator {/* 主方法,实现对本类其它方法的调用 */public final int calculate(String exp, String opt) {int array[] = split(exp, opt);return calculate(array[0], array[1]);}/* 被子类重写的方法 */abstract public int calculate(int num1, int num2);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;}}
package com.sj.template;public class Plus extends AbstractCalculator{@Overridepublic int calculate(int num1, int num2) {return num1 + num2; }}
package com.sj.template;public class Test {}
以上为了不保证他们全部一样,所以稍微改了点,要不然几乎可以与策略模式的代码结构一模一样。
策略模式与模板模式的区别 引用一段话:
Strategy模式允许外界使用其接口方法,因而可以将这个接口方法认为是"一整个算法";而Template Method模式可以限制所留下的虚方法只对其继承类可见,
外部使用者不一定能够直接使用这些虚方法,因而可以将这些虚方法认为是"一个算法的一部分".GoF的设计模式那本书里有这么一句话:"Template methods use inheritance
to vary part of an algorithm. Strategies use delegation to vary the entire algorithm.",说的正是这个问题.回到具体问题上,如果我们要封装的算法适合于提供给
用户任意使用,是"一整个算法",那么用Strategy模式较好;如果要封装的变化是一个算法中的部分(换言之,大算法的步骤是固定的),而且我们不希望用户直接使用这些方法,
那么应该使用Template Method模式.就此,问题的"痛处"算是抓住了
- java模式之策略模式&模板模式 以及策略模式与模板模式的区别
- 策略模式&模板模式
- 策略模式模板模式
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板模式和策略模式的区别
- 模板方法模式与策略模式的区别
- JDBC | 模板模式&策略模式
- 策略模式&&模板方法模式
- 模板模式和策略模式
- 模板方法模式,策略模式
- java中的策略模式与模板方法
- 模板和策略模式
- 找重复元素
- U3D Ray射线的创建和碰撞检测
- 33333333333
- Protocol Buffer技术详解(C++实例)
- String源码分析
- java模式之策略模式&模板模式 以及策略模式与模板模式的区别
- 虚幻4的学习——TSubclassof 的用法
- Linux下网络流量实时监控工具大全
- Set 运用
- Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
- hdu 1811 ufset综合
- 经济学原理-读书笔记一
- 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)
- socket编程的select模型