设计模式(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. BAT及各大互联网公司2014前端笔试面试题--JavaScript篇

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习js更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确, ...

  2. scikit-learn K近邻法类库使用小结

    在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...

  3. 【记录】EF Code First 实体关联,如何添加、修改实体?

    在使用 EF Code First 的时候,我们经常会对项目中的 Entry 进行一对多.多对多的映射配置,这时候就会产生主实体和子实体的概念,我们在添加.修改他们的时候,有时候会产生一些问题,比如添 ...

  4. 【记录】SqlBulkCopy 跨数据库,表自定义导入

    使用场景: 一个数据库中的表数据,导入到另一个数据库中的表中,这两个表的表结构不一样,如果表结构一样的时候,导入非常简单,直接读取导入就行了,表结构不一样,就意味着需要加入一些判断,SqlBulkCo ...

  5. 倾情大奉送--Spark入门实战系列

    这一两年Spark技术很火,自己也凑热闹,反复的试验.研究,有痛苦万分也有欣喜若狂,抽空把这些整理成文章共享给大家.这个系列基本上围绕了Spark生态圈进行介绍,从Spark的简介.编译.部署,再到编 ...

  6. Java基础--反射机制的知识点梳理

    什么是反射? 正常编译执行java文件时,会生成一个.class文件,反射就是一个反编译的过程,它可以通过.class文件得到一个java对象.一个类会有很多组成部分,比如成员变量,成员方法,构造方法 ...

  7. T-SQL简单查询语句

    简单查询: 1.最简单查询(查所有数据)select * from 表名: 注:* 代表所有列select * from info 2.查询指定列select code,name from info ...

  8. TCP三次握手,四次挥手

    前言 在面试的过程中,TCP的传输协议经常会出现.以前我参加面试的过程中就被问到过,现在轮到我面试其他人的时候,我也会问一些相关的问题.作为一名开发者,无论使用什么样的开发语言,最基本的网络知识一定要 ...

  9. jQuery中使用ajax,$.post

     jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...

  10. 【开源框架】SqlSugarRepository 全库ORM 正式发布

    SqlSugarRepository.dll 全库开发框架支持 四种数据库:SqlServer. MySql .Oracle和Sqlite. SqlSugarRepository是为全库开发而生的OR ...