`

Java 设计模式-模板方法模式(Template Method)

阅读更多

 

 

1. 定义

定义了算法的基本骨架,把一些步骤的实现延迟到子类中进行,它可以让子类不改变基本算法的数据结构而优化或者精加工( refine )某个特定的算法步骤。

 

2. 优点

模板方法设计模式有如下优点:

1)  减少了冗余的代码,重用代码部分通过父类完成

2)  将某个特定的算法步骤延迟到子类实现,不会影响父类的功能

3)  易于扩展,子类通过实现某个特定的方法而形成自己特定的算法逻辑,易于扩展

4)  子类不能修改父类算法的执行顺序

 

3. 实例

JUnit 为例, JUnit 的基础核心类 TestCase 使用到这种模式, TestCase 要求先运行 SetUp 方法,再运行子类中的各个 Test 方法,最后进行资源的释放。下例中的 testBare 方法,包含了算法的基本骨架: setUp,runTest tearDown ,而 setUp tearDown 没有实现任何逻辑,留给子类实现。因此再次总结,模板方法设计模式最大的好处是避免了代码的冗余,并且不会改变算法的基本步骤,只是对某个特定步骤的实现留给子类去完成。

/**

      * Runs the bare test sequence.

      * @exception Throwable if any exception is thrown

      */

    public void runBare() throws Throwable {

       Throwable exception= null ;

       setUp();

       try {

           runTest();

       } catch (Throwable running) {

           exception= running;

       }

       finally {

           try {

              tearDown();

           } catch (Throwable tearingDown) {

              if (exception == null ) exception= tearingDown;

           }

       }

       if (exception != null ) throw exception;

    }

 

protected void runTest() throws Throwable {

       assertNotNull ( fName ); // Some VMs crash when calling getMethod(null,null);

       Method runMethod= null ;

       try {

           // use getMethod to get all public inherited

           // methods. getDeclaredMethods returns all

           // methods of this class but excludes the

           // inherited ones.

           runMethod= getClass().getMethod( fName , (Class[]) null );

       } catch (NoSuchMethodException e) {

           fail ( "Method \"" + fName + "\" not found" );

       }

       if (!Modifier.isPublic (runMethod.getModifiers())) {

           fail ( "Method \"" + fName + "\" should be public" );

       }

 

       try {

           runMethod.invoke( this , (Object[]) new Class[0]);

       }

       catch (InvocationTargetException e) {

           e.fillInStackTrace();

           throw e.getTargetException();

       }

       catch (IllegalAccessException e) {

           e.fillInStackTrace();

           throw e;

       }

    }

    /**

      * Sets up the fixture, for example, open a network connection.

      * This method is called before a test is executed.

      */

    protected void setUp () throws Exception {

    }

    /**

      * Tears down the fixture, for example, close a network connection.

      * This method is called after a test is executed.

      */

    protected void tearDown() throws Exception {

    }

 

 

 

分享到:
评论

相关推荐

    java版本二十三种设计模式.zip

    - 模板方法模式(Template Method) - 策略模式(Strategy) - 责任链模式(Chain of Responsibility) - 中介者模式(Mediator) - 访问者模式(Visitor) - 命令模式(Command) - 解释器模式(Interpreter) - 迭代器...

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...

    JAVA设计模式(模板方法模式)—视频

    模版方法模式(Template Method) 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第23章 策略(strategy)模式 204 第24章 命令(command)模式 213 第25章 解释器(interpreter)模式 221 第26章 扩展型模式介绍 236 第27章 装饰...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5...

    Leitura-Boleto-Template-Method:使用设计模式模板方法使用Java读取CSV文件-大学作业

    Leitura-Boleto-模板方法使用设计模式模板方法使用Java读取CSV文件-大学作业

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) ...TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )

    java 23种设计模式及具体例子

    * 模板方法模式(Template Method) * 观察者模式(Observer) * 迭代子模式(Iterator) * 责任链模式(Chain of Responsibility) * 命令模式(Command) * 备忘录模式(Memento) * 状态模式(State) * 访问者...

    研磨设计模式-part2

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    研磨设计模式-part4

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    研磨设计模式-part3

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    14、模板方法模式(Template Method) 13 15、观察者模式(Observer) 14 16、迭代子模式(Iterator) 16 17、责任链模式(Chain of Responsibility) 18 18、命令模式(Command) 19 19、备忘录模式(Memento) 21 ...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合...

    design-pattern-java.pdf

    算法的封装与切换——策略模式(四) 模板方法模式-Template Method Pattern 模板方法模式深度解析(一) 模板方法模式深度解析(二) 模板方法模式深度解析(三) 访问者模式-Visitor Pattern 操作复杂对象结构——...

    Java设计模式,并加上个人理解

    8. 模板方法模式 (Template Pattern) 9. 建造者模式 (Builder Pattern) 10. 原型模式 (Prototype Pattern) 11. 组合模式 (Composite Pattern) 12. 装饰者模式 (Decorator Pattern) 13. 访问者模式 ...

    JAVA设计模式.rar

    模板方法模式【TEMPLATE METHOD PATTERN】  建造者模式【BUILDER PATTERN】 桥梁模式【BRIDGE PATTERN】  命令模式【COMMAND PATTERN】  装饰模式【DECORATOR PATTERN】 迭代器模式【ITERATOR ...

    Java 23种设计模式通解

    14. 模板方法模式(Template Method):提供了一个方法的基本结构,并允许子类在不修改基本结构的情况下重定义某些步骤。 15. 观察者模式(Observer):定义对象的一种一对多的依赖关系,使得每当一个对象改变状态时...

    JAVA经典设计模式大全

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...

    Java23种设计模式

    3.Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 4.Command,命令模式:将一个请求封装...

    设计模式_java语言中的应用

    主要内容有:Iterator-迭代器、Adapter(适配器)、Template Method(模板方法)、Factory Method(工厂方法)、Abstract Factory(抽象工厂)等。

Global site tag (gtag.js) - Google Analytics