- 浏览: 132028 次
文章分类
- 全部博客 (149)
- Java (41)
- 设计模式 (23)
- php (2)
- C++ (2)
- Linux (6)
- C (1)
- JavaEE (27)
- javascript (2)
- uplodify (1)
- Mybatis (2)
- Maven (4)
- Lucene (3)
- commons (1)
- Spring (7)
- SQL (3)
- mahout (1)
- MySQL (2)
- extjs4.2.1 (2)
- ubuntu (1)
- hadoop (1)
- hibernate (1)
- Spring JPA (2)
- JPA 2.0 (1)
- express (1)
- redis (2)
- angularjs (1)
- git (1)
- Python (1)
- logging (2)
最新评论
-
xlaohe1:
controller返回的是一个POJO对象,然后用@Resp ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
能帮到你,我也很高兴。
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
jobzjc:
第一段有帮到我。如果是非对象,Object方式传递的时候,第一 ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
dingran 写道为什么,我怎么就没找到System > ...
Ubuntu 12.04 设置 IBus 开机启动 -
dingran:
为什么,我怎么就没找到System >> Pref ...
Ubuntu 12.04 设置 IBus 开机启动
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template
Method lets subclasses redefine certain steps of an glgorithm without changing the algorithm's
structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可以重定义
该算法的某些特定步骤。
为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。
Method lets subclasses redefine certain steps of an glgorithm without changing the algorithm's
structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可以重定义
该算法的某些特定步骤。
为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。
public abstract class AbstractClass { protected abstract void doSomething(); protected abstract void doAnything(); public void templateMethod() { doSomething(); doAnything(); } } public class ConcreteClass1 extends AbstractClass { @Override protected void doSomething() { System.out.println("ConcreteClass1 doSomething"); } @Override protected void doAnything() { System.out.println("ConcreteClass1 doAnything"); } } public class ConcreteClass2 extends AbstractClass { @Override protected void doSomething() { System.out.println("ConcreteClass2 doSomething"); } @Override protected void doAnything() { System.out.println("ConcreteClass2 doAnything"); } } public class Clients { public static void main(String[] args) { AbstractClass class1 = new ConcreteClass1(); class1.templateMethod(); AbstractClass class2 = new ConcreteClass2(); class2.templateMethod(); } } 模板方法模式的优点 (1)封装不变部分,扩展可变部分。 (2)提取公共部分代码,便于维护。 模板方法使用的场景 (1)多个类有共有的方法,并且逻辑基本相同时。 (2)重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。 (3)重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过钩子函数约束 其行为。 public abstract class HummerModel { public abstract void start(); public abstract void stop(); public abstract void alarm(); public abstract void engineBoom(); public void run() { this.start(); this.engineBoom(); if (this.isAlarm()) { this.alarm(); } this.stop(); } // 钩子方法 protected boolean isAlarm() { return true; } } public class HummerH1Model extends HummerModel { private boolean alarmFlag = true; @Override public void start() { System.out.println("H1 start."); } @Override public void stop() { System.out.println("H1 stop."); } @Override public void alarm() { System.out.println("H1 alarm."); } @Override public void engineBoom() { System.out.println("H1 enginBoom."); } protected boolean isAlarm() { return this.alarmFlag; } public void setAlarm(boolean isAlarm) { this.alarmFlag = isAlarm; } } public class HummerH2Model extends HummerModel { @Override public void start() { System.out.println("H2 start."); } @Override public void stop() { System.out.println("H2 stop."); } @Override public void alarm() { System.out.println("H2 alarm."); } @Override public void engineBoom() { System.out.println("H2 enginBoom."); } protected boolean isAlarm() { return false; } }
发表评论
-
设计模式-享元模式(Flyweight)
2014-06-20 13:11 501使用共享对象可有效地支持大量的细粒度的对象。要求细粒度的对象 ... -
设计模式-桥接模式
2014-06-19 17:12 259将抽象和实现解耦,使得两者可以独立地变化。 桥接模式使用了 ... -
设计模式-状态模式
2014-06-16 10:37 370状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像 ... -
设计模式-代理和动态代理模式
2014-06-13 14:57 4051.简单代理模式 interface Interface ... -
java 迭代器
2014-06-11 18:04 607public class ReversibleArrayL ... -
设计模式-内部类工厂模式
2014-06-10 23:33 500public interface Service { ... -
设计模式-迭代器模式
2014-06-10 14:37 427迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又 ... -
设计模式-模板方法
2014-06-05 13:00 323public abstract class Caffein ... -
设计模式-适配器模式
2014-06-03 22:14 400适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让 ... -
设计模式-命令模式
2014-06-02 23:24 327public interface Command { ... -
设计模式-工厂方法
2014-06-01 18:04 454public abstract class PizzaSt ... -
设计模式-观察者模式
2014-06-01 11:03 4361. 利用Java 内置的类和接口实现观察者模式 publ ... -
设计模式-策略模式
2013-12-16 12:50 446Define a family of algorithms ... -
设计模式-装饰模式
2013-12-16 12:49 415Attach additional responibili ... -
设计模式-责任链模式
2013-12-11 18:00 500Avoid coupling the sender of ... -
设计模式-命令模式
2013-12-08 15:11 399命令模式是一个高内聚的模式。 Encapsulate ... -
设计模式-中介者模式
2013-12-08 12:29 367在多个对象依赖的情况下,通过加入终结者角色,取消了多个对象 ... -
设计模式-建造者模式(生成器模式)
2013-11-20 11:35 494ArrayList 或者 HashMap 如果定义为类的成员 ... -
设计模式-抽象工厂模式
2013-11-18 15:49 396Provide an interface for creati ... -
设计模式-工厂方法模式
2013-11-18 08:59 573Define an interface for creatin ...
相关推荐
设计模式-模板方法模式(讲解及其实现代码)
设计模式--模板方法模式java例子
适合20分钟左右讲解的模板方法模式。 自己上课用的。
JAVA-设计模式-行为型模式-模板方法模式
1.当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构 2.当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用 1.你可以让客户端只覆盖大型算
c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...
(1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示 (2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期
java设计模式中的模板模式,纯Java代码
java的23种常用设计模式:模板方法模式
设计模式专题之(十三)模板模式---设计模式模板模式示例代码(python--c++)
#设计模式之模板方法 ###准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性。最后将方法汇总构成一个不可改变的模板方法
设计模式总结-模板设计模式,单例模式(singleTon)
设计模式的模板方法模式的例子,希望对大家有用~~~~~~~~
设计模式-工厂方法 讲解及其源码
PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。