模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。
模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在其子类中完成。
1 这里有4个类,一个父类,用于抽象出模板方法 另外2个子类 继承父类 ,最后一个是测试类
吃的模板类
package com.dream.template; /** * @author zxg * 模板方法模式父类抽象类 * 1 抽象类 * 2 基本方法 * 3 抽象方法 * 4 模板方法(final) * 5 钩子方法 */ public abstract class EatTemplate { public final void eatProcess(){ goWhere(); eatWhat(); eating(); if(ifsleep()){ after(); } } protected void goWhere(){ System.out.println("杭州万塘路"); } protected abstract void eatWhat(); protected abstract void eating(); protected void after(){ System.out.println("吃好洗洗睡了"); } /**是否睡觉 * 用钩子方法给予子类更大的灵活性,最后将方法汇总构成一个不可改变的模板方法。 * @return */ protected boolean ifsleep(){ return true; } }
2 吃鱼的实现类
package com.dream.template; /** * @author zxg * 1 实现基类的抽象方法 2覆盖钩子方法 */ public class EatFishTemplate extends EatTemplate{ /* * @see com.dream.template.EatTemplate#eatWhat() */ protected void eatWhat() { System.out.println("烤鱼"); } protected void eating() { System.out.println("在吃烤鱼啊,好好吃奥。。。"); } protected void after() { System.out.println("吃了鱼可以好好的睡一觉"); } protected boolean ifsleep(){ return false; } }
3 吃龙虾的实现类
package com.dream.template; public class EatLobsterTemplate extends EatTemplate{ @Override protected void eatWhat() { System.out.println("吃龙虾"); } @Override protected void eating() { System.out.println("吃2斤龙虾"); } @Override protected void after() { System.out.println("吃完龙虾后可以好好睡一觉了"); } }
4 测试类
package com.dream.template; import org.junit.Test; /** * @author zxg * 抽象方法模式测试类 */ public class TempatePatternTest { /** * 吃鱼 */ @Test public void testFishTemplate(){ EatTemplate fishTemplate = new EatFishTemplate(); fishTemplate.eatProcess(); } /** * 吃龙虾 */ @Test public void testLobsterTemplate(){ EatTemplate lobsterTemplate = new EatLobsterTemplate(); lobsterTemplate.eatProcess(); } }
总结 :一般情况下,钩子方法的返回值为true,如果不希望某方法执行,可以在其子类中覆盖钩子方法,将其返回值改为false即可,这种类型的钩子方法可以控制方法的执行,对一个算法进行约束。
还有一类钩子方法就是实现体为空的具体方法,子类可以根据需要覆盖或者继承这些钩子方法,与抽象方法相比,这类钩子方法的好处在于子类如果没有覆盖父类中定义的钩子方法,编译可以正常通过,但是如果没有覆盖父类中声明的抽象方法,编译将报错。
优点
1 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
2 子类实现算法的某些细节,有助于算法的扩展。
3 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
缺点
1 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
适用场景
1 在某些类的算法中,用了相同的方法,造成代码的重复。
2 控制子类扩展,子类必须遵守算法规则。
相关推荐
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...
JAVA-设计模式-行为型模式-模板方法模式
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...
设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板,能够提升代码的可读性、可维护性和复用性。而Qt4作为一个强大的开源库,提供了丰富的功能,使得开发者能够在多个操作系统上构建...
模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义执行算法的框架,而将一些步骤延迟到子类中。这样,你就能创建一个可复用的框架,将具体步骤留给子类来实现。这个模式的核心思想是抽象类定义了一...
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...
在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义 1. 模板方法模式的定义 模板方法模式——在一个抽象类中定义...
C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决方案。在本资源中,"C++设计模式-基于QT4开源跨平台开发框架 源码",我们将重点探讨如何在C++编程语言中结合QT4框架来...
模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...
**模板模式**是一种行为设计模式,它允许在父类中定义算法的骨架,而将一些具体步骤的实现延迟到子类中。这种模式主要用于在代码中定义一套算法的框架,并允许子类在不改变算法整体结构的情况下重定义特定的步骤。 ...
新模式-html网页模板, 我做了三年的.net开发了, 至今为止觉得是美工设计的最好的一款网页了, 只是参考,不能作为商业用途哈,如果是引起什么法律 纠纷,请不要来找我哦, 大家都是搞IT的,都明白这个道理哈,
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...
模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...
设计模式并非具体的代码或库,而是一种在特定情境下解决问题的模板,它描述了在面向对象设计中常见问题的通用解决方案。这23种设计模式可以分为三类:创建型、结构型和行为型。 1. 创建型设计模式: - 单例模式:...
模板方法模式是面向对象设计模式的一种,它在行为模式中占据重要地位。此模式的核心思想是定义一个操作的框架,允许子类在这个框架内自定义具体的行为。这为代码复用和实现相同逻辑的不同实现提供了方便,同时也遵循...