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模式.就此,问题的"痛处"算是抓住了



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 北京医保卡坏了怎么办 去了越南的签证怎么办 护照签证到期还在国外怎么办 办护照预约满了怎么办 未满16岁怎么办护照 办理护照采集指纹录不上怎么办 办理护照时指纹没有怎么办 未满16岁的怎么办护照 身份证照得太丑怎么办 武汉江夏怎么办健康证 小孩偏胖肚子大怎么办 手机安全中心密码忘记了怎么办 进京证一年12次怎么办 青霉素和头孢都过敏怎么办 手汗孢疹肿胀怎么办能吃消炎药吗 手机上办进京证怎么办 杭州公共自行车还车点满了怎么办 法院判决书下来对方不给钱怎么办 抓进看守所的人怎么办 在拘留所里病重抢救怎么办 昆明公租房户型确认后怎么办 18年工作好难找怎么办 我没工作了怎么办2018 婚姻质量差不幸福该怎么办 吸毒犯戒毒所不收怎么办 信用卡到期人进拘留所怎么办? 人在拘留所信用卡逾期怎么办 探视权不让接走怎么办 医保过了缴费期怎么办 充电宝充手机慢怎么办 执行局执行不到钱怎么办 小孩挖耳朵疼了怎么办 挖耳朵挖破了怎么办 挖耳朵皮挖破了耳鸣怎么办 北京自考证丢啦怎么办 不服检察院的答复函该怎么办 检察院控申答复函不复怎么办 在看守所里疯了怎么办 第一次吸毒拘留五天第二次会怎么办 被派出所拘留15天怎么办 老公从拘留所出来聪明老婆怎么办