java 的模板方式设计模式

适用场景
在某些类的算法中,用了相同的方法,造成代码的重复。
控制子类扩展,子类必须遵守算法规则。
缺点
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
优点
模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
子类实现算法的某些细节,有助于算法的扩展。
通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

模式中的角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
应用
举个例子,以准备去学校所要做的工作(prepareGotoSchool)为例,假设需要分三步:穿衣服(dressUp),吃早饭(eatBreakfast),带上东西(takeThings)。学生和老师要做得具体事情肯定有所区别。
抽象类AbstractClass

  1. public
    abstract class AbstractPerson{
  2. //抽象类定义整个流程骨架
  3. public void prepareGotoSchool(){
  4. dressUp();
  5. eatBreakfast();
  6. takeThings();
  7. }
  8. //以下是不同子类根据自身特性完成的具体步骤
  9. protected abstract void dressUp();
  10. protected abstract void eatBreakfast();
  11. protected abstract void takeThings();
  12. }

复制代码

具体类ConcreteClass

  1. public
    class Student extends AbstractPerson{
  2. @Override
  3. protected void dressUp() {
  4. System.out.println(“穿校服");
  5. }
  6. @Override
  7. protected void eatBreakfast() {
  8. System.out.println(“吃妈妈做好的早饭");
  9. }
  10. @Override
  11. protected void takeThings() {
  12. System.out.println(“背书包,带上家庭作业和红领巾");
  13. }
  14. }

复制代码

  1. public
    class Teacher extends AbstractPerson{
  2. @Override
  3. protected void dressUp() {
  4. System.out.println(“穿工作服");
  5. }
  6. @Override
  7. protected void eatBreakfast() {
  8. System.out.println(“做早饭,照顾孩子吃早饭");
  9. }
  10. @Override
  11. protected void takeThings() {
  12. System.out.println(“带上昨晚准备的考卷");
  13. }
  14. }

复制代码

  1. public
    class Client {
  2. public static void main(String[] args) {
  3. Student student = new Student()
  4. student.prepareGotoSchool();
  5. Teacher teacher  = new Teacher()
  6. teacher.prepareGotoSchool();
  7. }
  8. }

复制代码

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。

更多
java学习,java资料,java经验分享  http://techfoxbbs.com

时间: 2024-11-12 19:35:47

java 的模板方式设计模式的相关文章

自己瞎捉摸学习:十三种设计模式之模板方式设计

模板方式就是将对象分为可变与不可变得部分,就例如spring_mvc中的共有行为和特有行为,将不可变的部分封装起来,提供给需要此类对象操作的用户,然后将再有用户对对可变部分进行自己的进一步处理,就例如springmvc中的特有行为. 目前已用的模板设计模式, 1,JDBCtemplate 顾名思义,在操作数据库连接池对数据库进行CRUD时,其中的某些步骤的固定不定的,例如注册驱动,获取连接对象等,而JDBCTemplate就是对这些共性进行了封装 我们使用时只需创建此类对象,然后对对象进行可变行

Java经典23种设计模式之结构型模式(二)

接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和组合对象的使用具有一致性.单看这句话貌似有点抽象,其实比较简单. 以李云龙的独立团为例,目的要统计赵嘉宇一战共歼灭敌人多少个.最高的级别是团,一个团有若干个营,一个营有若干个排,一个排有若干个战士.(为了简化问题,排下面就不设行政单位了).很自然的,李云龙给营长开会回去给老子统计.营长回去给各个排长开会,赶紧

java 的23种设计模式 之单身狗和隔壁老王的故事

觉得代码写的别扭了,回头翻翻java 的23种设计模式.today,额,这么晚了,困了.就弄个最简单的单例模式吧. 单例模式:俗称单身狗 package singleton; public class SingleTon { private static final class SingleTonBuilder { private static SingleTon singleTon = new SingleTon(); } private SingleTon() { } public stat

Java的23种设计模式(转)

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因

Java经典23种设计模式之创造型模式(二)

本文记录5种创造型模式的剩下两种:建造者模式(Builder).原型模式(PROTOTYPE). 一.建造者模式(别名:生成者模式) 将复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示.一个完整的建造者模式包含以下几个概念: 1.产品类 Product public class Person { private String head; private String body; private String foot; public String getHead() { ret

Java之23种设计模式解析

一.设计模式概述 总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式.结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式.具体如下:其中创建型有: 一.Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二.Abstra

Java研究之学习设计模式-抽象工厂模式详解

 简介:          当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产[1] 品角色都有两个具体产品.抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化.每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式针对的是多个产品等级结构.(摘自百度百科) 话语说得太抽象,程序员最好的表示方式

<转>经典:从追MM谈Java的23种设计模式

设计模式做为程序员的“内功心法”,越来越受到.net 社区的重视,这种变化是很可喜的,Java社区走在了我们的前面,但这种状况 也许有一天会发生改变. 从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅的Factory. 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修

JAVA:23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用 设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我