设计模式(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="" />

设计举例

 //抽象模板
public abstract class AbstractClass
{
protected abstract void doAnyting(); protected abstract void doSomething(); public void templateMethod()
{
doAnyting();
doSomething();
}
} public class ConcreteClass1 extends AbstractClass
{
@Override
protected void doAnyting()
{
System.out.println("do class1 anything");
} @Override
protected void doSomething()
{
System.out.println("do class1 something");
}
} public class ConcreteClass2 extends AbstractClass
{
@Override
protected void doAnyting()
{
System.out.println("do class2 anything");
} @Override
protected void doSomething()
{
System.out.println("do class2 something");
}
} public class Client
{
public static void main(final String[] args)
{
final AbstractClass c1 = new ConcreteClass1();
final AbstractClass c2 = new ConcreteClass2();
c1.templateMethod();
c2.templateMethod();
}
}

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. Neutron 网络基本概念 - 每天5分钟玩转 OpenStack(66)

    上次我们讨论了 Neutron 提供的功能,今天我们学习 Neutron 模块几个重要的概念. Neutron 管理的网络资源包括 Network,subnet 和 port,下面依次介绍. netw ...

  2. 从零开始编写自己的C#框架(9)——数据库设计与创建

    对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合:空间换性能:空间换开发效率:减少null异常.... ...

  3. 小菜学习Winform(一)贪吃蛇2

    前言 上一篇<小菜学习Winform(一)贪吃蛇>中实现了简单版的贪吃蛇,在文章末也提到需要优化的地方,比如使用oo.得分模式.速度加快模式和减少界面重绘.因为是优化篇,实现方式上一篇有, ...

  4. spring @import和@importResource

    @ImportResource in spring imports application xml in configuration file which is using @Configuratio ...

  5. “英雄之旅”见闻和小结----angular2系列(三)

    前言: 本系列在前面两篇文章,介绍了Zone.js和angular2的基础概念.而后对于ng2的学习,还是由官方的 Tour of Heroes 开始. 以下内容经过提炼和个人理解,当然也会有不正确的 ...

  6. ZOJ Problem Set - 1201 Inversion

    题目:这道题目的意思让人猛地一读有点反应不过来,简单解释下: 给定序列A:a1,a2,a3....,an,如果i<j且ai>aj则(ai,aj)称为序列A的一个倒置. 之后引出了序列的倒置 ...

  7. hdu FatMouse's Speed 动态规划DP

    动态规划的解决方法是找到动态转移方程. 题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3&sectionid ...

  8. 探秘Tomcat——从一个简陋的Web服务器开始

    前言: 无论是之前所在实习单位小到一个三五个人做的项目,还是如今一个在做的百人以上的产品,一直都能看到tomcat的身影.工作中经常遇到的操作就是启动和关闭tomcat服务,或者修改了摸个java文件 ...

  9. 简述ASP.NET MVC原理

    1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...

  10. H5基于iScroll实现下拉刷新,上拉加载更多

    前言 前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是刷新最新数据 ...