设计模式(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. CentOS 7下MySQL服务启动失败的解决思路

    今天,启动MySQL服务器失败,如下所示: [root@spark01 ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl): Jo ...

  2. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

  3. 使用Spire.Doc来转换文本

    使用Spire.Doc来转换文本 前段时间,我为不熟悉这个产品的读者们写了一篇关于我对 Spire.Doc的初识印象.Spire.Doc是一个专业的Word .NET库,它是专门为开发人员设计的用来快 ...

  4. STL模板中的map的使用与例题

    最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...

  5. 【LeetCode】Palindrome Pairs(336)

    1. Description Given a list of unique words. Find all pairs of distinct indices (i, j) in the given ...

  6. jquery 图片轮播demo实现

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 图片轮播demo,弄清楚过程其实是一个很简单的东西,看网上都没有什么实质性的代码,就自己把过程捋了一遍实现了. 这次因为随手写的,所以没有做 ...

  7. 1.Java基础之System对象

    毕向东老师Java基础学习笔记——System对象 今天学习Java中的System对象后,感觉这个对象对我们主要有以下几点用处. 1.获取当前操作系统版本和类型. 2.获取当前操作系统的path中的 ...

  8. js修改不了input的值

    奇怪的input 今天想做一个通过点击按钮,修改input值的控件,但是点击按钮后,input值变成修改的值后又变回了原来的值,百思不得其解,代码如下 <form> <div cla ...

  9. 【原创】轻量级即时通讯技术MobileIMSDK:Android客户端开发指南

    申明:MobileIMSDK 目前为个人维护的原创开源工程,现陆续整理了一些资料,希望对需要的人有用.如需与作者交流,见文章底签名处,互相学习. MobileIMSDK开源工程的代码托管地址请进入 G ...

  10. CentOS6.5网络设置

    CentOS6.5网络设置 不知道哪里做错了,长时间无法连接网络,百度了各种还是不可以.最后自己提取了以前可以联网的配置粘贴过来,成功.配置文件内容如下: vim /etc/resolv.conf 1 ...