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

1.设计模式的分类

创建型模式:

  • Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点。
  • Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
  • Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。
  • Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
  • Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型模式:

  • Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
  • Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
  • Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。
  • Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。
  • State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。
  • Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。
  • China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系
  • Mediator,中介者模式:用一个中介对象封装一些列的对象交互。
  • Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。
  • Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
  • Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型模式:

  • Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。
  • Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。
  • Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问
  • Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。
  • Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。
  • Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。
  • Flyweight,享元模式

2.模板方法Template Method

概述

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

模式中的角色

    抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
    具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
aaarticlea/gif;base64,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" alt="" />

设计举例

  1. //抽象模板
  2. public abstract class AbstractClass
  3. {
  4. protected abstract void doAnyting();
  5.  
  6. protected abstract void doSomething();
  7.  
  8. public void templateMethod()
  9. {
  10. doAnyting();
  11. doSomething();
  12. }
  13. }
  14.  
  15. public class ConcreteClass1 extends AbstractClass
  16. {
  17. @Override
  18. protected void doAnyting()
  19. {
  20. System.out.println("do class1 anything");
  21. }
  22.  
  23. @Override
  24. protected void doSomething()
  25. {
  26. System.out.println("do class1 something");
  27. }
  28. }
  29.  
  30. public class ConcreteClass2 extends AbstractClass
  31. {
  32. @Override
  33. protected void doAnyting()
  34. {
  35. System.out.println("do class2 anything");
  36. }
  37.  
  38. @Override
  39. protected void doSomething()
  40. {
  41. System.out.println("do class2 something");
  42. }
  43. }
  44.  
  45. public class Client
  46. {
  47. public static void main(final String[] args)
  48. {
  49. final AbstractClass c1 = new ConcreteClass1();
  50. final AbstractClass c2 = new ConcreteClass2();
  51. c1.templateMethod();
  52. c2.templateMethod();
  53. }
  54. }

java设计模式 模板方法模式Template Method的更多相关文章

  1. 设计模式 - 模板方法模式(template method pattern) JFrame 具体解释

    模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(templ ...

  2. 设计模式 - 模板方法模式(template method pattern) 排序(sort) 具体解释

    模板方法模式(template method pattern) 排序(sort) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(tem ...

  3. 设计模式 - 模板方法模式(template method pattern) 具体解释

    模板方法模式(template method pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 模板方法模式(template metho ...

  4. C#设计模式-模板方法模式(Template Method)

    概念 模板指一些可以套用的公共内容,例如网页模板是当网站中有许多页面版式色彩相同的情况下,将其定义为网页模板,并定义其中部分可编辑,部分不可编辑,那么在利用网页模板制作其他页面时就会很方便,不易出错. ...

  5. 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)

      设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...

  6. 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

    原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...

  7. 模板方法模式 Template method 行为型 设计模式(二十六)

    模板方法模式 Template method 上图为网上百度的一份简历模板截图   相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为 ...

  8. 模板方法模式-Template Method(Java实现)

    模板方法模式-Template Method 在模板模式中, 处理的流程被定义在父类中, 而具体的处理则交给了子类. 类关系图很简单: Template接口 这里定义了子类需要实现的方法(before ...

  9. 二十四种设计模式:模板方法模式(Template Method Pattern)

    模板方法模式(Template Method Pattern) 介绍定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method使得子类可以不改变一个算法的结构即可重定义该算法 ...

随机推荐

  1. Notes:DOM的事件模拟

    首先使用document对象的createEvent方法创建一个事件对象,然后初始化该事件对象,接着使用支持事件DOM节点的dispatchEvent方法触发事件. DOM2级事件和DOM3级事件有些 ...

  2. Windows 搭建 .NET 跨平台环境并运行应用程序

    写在前面 阅读目录: Install .NET Version Manager (DNVM) Install .NET Core Execution Environment (DNX) Write t ...

  3. mysql乐观锁总结和实践--转

    原文地址:http://chenzhou123520.iteye.com/blog/1863407 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任 ...

  4. 用Spire.doc来合并邮件

      用Spire.doc来合并邮件 让我们想象一下这样的场景:你在一家IT公司上班.某天公司的某一产品大幅度升级了.然后你需要通知所有的客户.这真是很长的名单.一个个的通知他们是有点蠢的,因为这要花费 ...

  5. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  6. spring整合hibernate的详细步骤

    Spring整合hibernate需要整合些什么? 由IOC容器来生成hibernate的sessionFactory. 让hibernate使用spring的声明式事务 整合步骤: 加入hibern ...

  7. 关于WebGIS开源解决方案的探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 公司目前的多数项目采用的是ArcGIS产品+Oracle+W ...

  8. 【吐槽】gist.github.com疑遭中间人攻击

    北京时间201510081004,云南电信用户,现在上https://gist.github.com/,用IE10会提示证书被伪造,用搜狗4.1.3.9668会跳转到[http://www.cjb.n ...

  9. 关于SQL Server 安装程序在运行 Windows Installer 文件时遇到错误

    前几日安装sql server2008r2 的时候碰到这个问题: 出现以下错误: SQL Server 安装程序在运行 Windows Installer 文件时遇到错误. Windows Insta ...

  10. Java Web项目RSA加密

    最近做的一个项目,服务器为Java,采用SSH框架,客户端为Android和IOS.当用户登录时,从客户端向服务器提交用户名和密码.这就存在一个问题,如果数据包在网络上被其他人截取了,密码就有可能泄露 ...