10.模板方法模式
来源:互联网 发布:云计算 大数据 编辑:程序博客网 时间:2024/06/06 01:08
package templateMethod;/** * 模板方法: 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 * 我的理解就是好多东西都定义到父类(但是不做具体的实现 而是抽象或者实现类中简单实现) 子类中根据需求进行具体的实现 * * 优点: ☆ 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。 * ☆ 子类实现算法的某些细节,有助于算法的扩展。 * ☆ 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。 * 缺点: * △ 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。 * 适用场景: * □ 在某些类的算法中,用了相同的方法,造成代码的重复。 * □ 控制子类扩展,子类必须遵守算法规则。 * * 模板方法模式的结构: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现 * * 模版方法:由抽象类声明并加以实现。一般来说,模版方法调用抽象方法来完成主要的逻辑功能, * 并且,模版方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写。 * * 钩子方法:由抽象类声明并加以实现。但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。 * 抽象类的任务是--》搭建逻辑的框架,通常由经验丰富的人员编写,因为抽象类的好坏直接决定了程序是否稳定性 * * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月14日 下午3:09:13 */public class TemplateMethod {public static void main(String[] args) { Son son = new Son(); son.templateMethod();}}abstract class Father {/* * 抽象方法 */abstract void abstractMethod();/* * 模版方法 */final void templateMethod(){System.out.println("本方法不能被子类重写!!!!");System.out.println("------调用钩子方法hookMethod开始");hookMethod();System.out.println("------调用钩子方法hookMethod结束");System.out.println("------调用抽象方法开始");abstractMethod();System.out.println("------调用抽象方法结束");//返回布尔类型的钩子方法if(isPermit()){System.out.println("isPermit这类方法就是用来控制逻辑的 子类如果不想走这条分支 完全可以覆盖isPermit 返回false 像svn设置权限的钩子文件可能用的就是这个模式");}}/* * 钩子方法 子类实现 */public void hookMethod() {System.out.println("父类钩子方法的实现");}/* * 钩子方法 2 * 这类钩子方法很实用 * 用于对某个条件进行判断,如果条件满足则执行某一步骤 看我在templateMethod中怎么使用 */public boolean isPermit() {return true;}}class Son extends Father{/** 钩子方法 子类实现*/public void hookMethod() {System.out.println("子类钩子方法的实现");}/* * 实现抽象方法 */void abstractMethod() {System.out.println("子类实现抽象方法");}/* * 如果不想执行if(isPermit) 这个分支 可以覆盖这个方法 返回false */public boolean isPermit() {return false;}}
阅读全文
0 0
- 10.模板方法模式
- 10. 模板方法模式
- 深入浅出模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法设计模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式
- centos6.5 安装git
- Storm1.1.0<Error preparing HdfsBolt: No FileSystem for scheme: hdfs>
- 登录不用submit
- (1) Shell 脚本简介
- 常用cmd命令
- 10.模板方法模式
- 亲测 vs2010 + qt-opensource-windows-x86-vs2010-4.8.6 纯静态库编译
- Makefile经典教程(掌握这些足够)
- 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
- hdu_round1-1012 YYF和女朋友玩游戏
- 11.迪米特法则
- CC3200之 开发环境简介(2)烧录程序
- 使用python怎样检测伪造视频?
- HTML初级2