Template Method Pattern 模板方法模式
2015-07-06 13:13
633 查看
Template Method Pattern: defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。
This pattern is all about creating a template for an algorithm. It;s a method that defines an algorithm as a set of steps. Some steps are concrete, some are abstract.
public abstract class Template {
protected final void TemplateMethod() {
primitiveMethod();
concreteMethod();
hook();
}
protected abstract void primitiveMethod1();
protected final void concreteMethod() {
//do something
}
protected hook() {}
}
A hook is a method that is declared in the abstract class, but only given an empty or default implementation. So subclass can either use the default method or override the hook method.
Design Principle:
Hollywood Principle: Don't call us, we'll call you.
Allow low-level components to hook themselves into a system, but the high-level components determine when they are needed, and how.
准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。
This pattern is all about creating a template for an algorithm. It;s a method that defines an algorithm as a set of steps. Some steps are concrete, some are abstract.
public abstract class Template {
protected final void TemplateMethod() {
primitiveMethod();
concreteMethod();
hook();
}
protected abstract void primitiveMethod1();
protected final void concreteMethod() {
//do something
}
protected hook() {}
}
A hook is a method that is declared in the abstract class, but only given an empty or default implementation. So subclass can either use the default method or override the hook method.
Design Principle:
Hollywood Principle: Don't call us, we'll call you.
Allow low-level components to hook themselves into a system, but the high-level components determine when they are needed, and how.
相关文章推荐
- nginx 跨域acl
- Linux echo 命令
- Linux用户空间与内核空间
- 字符串处理增强类
- BZOJ1816: [Cqoi2010]扑克牌
- 2012年5月SAT香港真题解析
- Windows下Hook API技术小结 (转)
- ViewPager禁止滑动已经去掉默认的滑动效果。
- ASP.NET 为什么要有 MVC
- 队列的C++实现
- message sent to deallocated instance
- sql server无法删除数据库,解决方法
- Linux-Tmux使用初体验
- [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用
- Java实现对象排序的两种方法
- https原理及tomcat配置https方法
- TCP/IP协议详解v1(第三章IP网际协议)
- SpringMVC(三)@PathVariable
- TCP/IP协议详解v1(第二章数据链路层)
- 搜集常见的测试语句