Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类中实现,而各子类中可变的行为则由各子类自己重写基类方法实现. 

Strategy则是在使用策略模式的应用实例内部维护一个策略实例,针对不同的子类用不同的策略实现. 



来看看两者的代码实现: 



Template Method模式 -- 基类

  1. package com.dzeay.pattern.template_method;
  2. public class BaseTemplate {
  3. public void doSameThing() {
  4. System.out.println("BaseTemplate.doSameThing");
  5. }
  6. public void doOtherThing() {
  7. System.out.println("BaseTemplate.BaseTemplate");
  8. }
  9. }

Template Method模式 -- 子类A

  1. package com.dzeay.pattern.template_method;
  2. public class AClass extends BaseTemplate {
  3. @Override
  4. public void doOtherThing() {
  5. System.out.println("AClassImpl.doOtherThing");
  6. }
  7. }

Template Method模式 -- 子类B

  1. package com.dzeay.pattern.template_method;
  2. public class BClass extends BaseTemplate {
  3. @Override
  4. public void doOtherThing() {
  5. System.out.println("BClassImpl.doOtherThing");
  6. }
  7. }

Template Method模式 -- 测试类

  1. package com.dzeay.pattern.template_method;
  2. /**
  3. * <pre>
  4. * Template Method(模板方法模式)详解:
  5. * 由基类提供一个模板,将各子类中不变的行为提取到基类中实现,
  6. * 而各子类中可变的行为由各子类自己重写基类方法实现
  7. * </pre>
  8. *
  9. * @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
  10. * @since 2010-11-15
  11. * @version 1.0
  12. */
  13. public class TestClass {
  14. /**
  15. *
  16. * @param args
  17. */
  18. public static void main(String[] args) {
  19. BaseTemplate aClass = new AClass();
  20. aClass.doSameThing();
  21. aClass.doOtherThing();
  22. BaseTemplate bClass = new BClass();
  23. bClass.doSameThing();
  24. bClass.doOtherThing();
  25. }
  26. }

Strategy模式 -- 策略接口

  1. package com.dzeay.pattern.strategy;
  2. public interface IStrategy {
  3. public void doOtherThing();
  4. }

Strategy模式 -- 策略A

  1. package com.dzeay.pattern.strategy;
  2. public class AStrategy implements IStrategy {
  3. @Override
  4. public void doOtherThing() {
  5. System.out.println("AStrategy.doOtherThing");
  6. }
  7. }

Strategy模式 -- 策略B

  1. package com.dzeay.pattern.strategy;
  2. public class BStrategy implements IStrategy {
  3. @Override
  4. public void doOtherThing() {
  5. System.out.println("BStrategy.doOtherThing");
  6. }
  7. }

Strategy模式 -- 应用

  1. package com.dzeay.pattern.strategy;
  2. public class Context {
  3. private IStrategy strategy;
  4. public Context() {
  5. }
  6. public Context(IStrategy strategy) {
  7. this.strategy = strategy;
  8. }
  9. public void doOtherThing() {
  10. this.strategy.doOtherThing();
  11. }
  12. public void setStrategy(IStrategy strategy) {
  13. this.strategy = strategy;
  14. }
  15. }

Strategy模式 -- 测试类

  1. package com.dzeay.pattern.strategy;
  2. /**
  3. * <pre>
  4. * Strategy(策略模式)详解:
  5. * 在使用策略模式的应用实例内部维护一个strategy实例,针对不同的子类用不同的策略实现
  6. * </pre>
  7. *
  8. * @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
  9. * @since 2010-11-15
  10. * @version 1.0
  11. */
  12. public class TestClass {
  13. /**
  14. * @param args
  15. */
  16. public static void main(String[] args) {
  17. Context context = new Context();
  18. context.setStrategy(new AStrategy());
  19. context.doOtherThing();
  20. context.setStrategy(new BStrategy());
  21. context.doOtherThing();
  22. context.setStrategy(new IStrategy() {
  23. @Override
  24. public void doOtherThing() {
  25. System.out.println("doOtherThing");
  26. }
  27. });
  28. context.doOtherThing();
  29. }
  30. }

未完待续 ........

Template Method模式和Strategy模式有何异同的更多相关文章

  1. Java设计模式(18)策略模式(Strategy模式)

    Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...

  2. Template Method模式和Strategy模式[继承与委托]

    继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Tem ...

  3. Template Method(模板方法)模式

    1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1: ...

  4. 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...

  5. 设计模式之Singleton模式和Strategy模式是什么

    Singleton模式 单例模式,也交单子模式,有时候系统只需要拥有一个全局对象. 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方 ...

  6. 创建型模式之Strategy模式

    应用场景 实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如编写排序算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的 ...

  7. 策略模式(Strategy

    Strategy 无论什么程序,其目的都是解决问题.而为了解决问题,我们又需要编写特定的算法.使用Strategy模式可以整体地替换算法的实现部分.能够整体地替换算法,能让我们轻松地以不同的算法去解决 ...

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

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

  9. Java设计模式(22)命令模式(Command模式)

    Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...

随机推荐

  1. 02-大鸭梨博客系统数据库设计及Dapper的使用

    毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配 ...

  2. (转)Android 弹软键盘时listview的变化控制

    本文转自于:http://blog.csdn.net/hellohaifei/article/details/9377483 问题描述:界面中有三部分,上面是标题栏,中间是Listview,下面是输入 ...

  3. mongodb所在目录空间不足解决方法

    1.原理是将目录/home/aa软连接到/usr/lib/下,以后从/usr/lib下读取的内容其实都是放在/home/aa下. 建议不要大范围动/usr下的内容,咋着也是属于系统目录,可能会对已装软 ...

  4. 【redis】redis的 key的命名规则

    key的命名规则 定义为 MS-TEN:SESSION_KEY_IN_LOGIN_NAME:fqh 使用:进行分割,这样存入redis的是有层次结构的,如下

  5. STL理论基础、容器、迭代器、算法

    一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...

  6. 基于JQ的简单左右轮播图

    // 轮播图 主要实现思想: a.第一层div,设置overflow为hidden. b.里面是一个ul,每个li里面有个img或者为每个li设置背景图片也可以. c.li设置为左浮动,排成一行,还有 ...

  7. linux 定时备份mysql

    定时备份:1.创建备份文件存放目录2.创建备份脚本backup.sh #!/bin/bash DBUser=db_backDBPasswd=passwordDBName=db_nameSERVER=l ...

  8. 在<img src="..." title="..."> 中使title的内容换行的方法

    在<img src="..." title="...">中要使TITILE的内容换行,不能使用html标签,只能用ASCII码,方法如下: < ...

  9. request_mem_region,ioremap 和phys_to_virt()

    转载: request_mem_region,ioremap 和phys_to_virt()   Linux在头文件include/linux/ioport.h中定义了三个对I/O内存资源进行操作的宏 ...

  10. rtsp/rtp over http

    转载:http://linux-expert.blog.163.com/blog/static/764585292008530912712/ rtsp/rtp over http C->S (g ...