java模式之-模板方法模式
2016-05-05 11:59
459 查看
模板方法模式是java设计模式常见的模式之一。
《JAVA与模式》中写道:
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
下面是自己写的小demo,便于理解模板方法模式。
1.父类
2 子类
测试类:我是采用的Junit4单元测试
output:
关闭家门
上锁
离开家
坐火车
到达目的地:北京
关闭家门
离开家
坐飞机
到达目的地:上海
《JAVA与模式》中写道:
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
下面是自己写的小demo,便于理解模板方法模式。
1.父类
package com.westward; public abstract class GoToCity { /** * 模板方法,必须定义为public final的。子类能够使用,但不能复写 * 子类都有相同的步骤,但是有些步骤有不同的实现。 * */ public final void go(){ closeDoor(); if (isLock()) { getLock(); } leaveHome(); onTheWay(); arrive(); } /** * 不同子类不同的行为,将行为延迟到子类实现 * */ protected abstract void arrive(); /** * 不同子类不同的行为,将行为延迟到子类实现 * */ protected abstract void onTheWay(); /** * 共有的行为,在基类实现,并对子类隐藏 * */ private void leaveHome() { System.out.println("离开家"); } /** * 共有的行为,在基类实现,并对子类隐藏 * */ private void closeDoor() { System.out.println("关闭家门"); } /** * 共有的行为,在基类实现,并对子类隐藏 * 有些子类执行,有些不执行。所以用到了钩子方法 * */ private void getLock(){ System.out.println("上锁"); } /** * 钩子方法,用来决定一些方法是否执行 * 子类可以复写此方法,来决定是否执行某方法 * */ protected boolean isLock(){ return true; } }
2 子类
package com.westward; public class GoToBeijing extends GoToCity { @Override protected void arrive() { System.out.println("到达目的地:北京"); } @Override protected void onTheWay() { System.out.println("坐火车"); } }
package com.westward; public class GoToShanghai extends GoToCity { @Override protected void arrive() { System.out.println("到达目的地:上海"); } @Override protected void onTheWay() { System.out.println("坐飞机"); } @Override protected boolean isLock() { return false; } }
测试类:我是采用的Junit4单元测试
package com.westward; import static org.junit.Assert.*; import org.junit.Test; public class TemplateMethodTest { @Test public void test() { GoToCity go1= new GoToBeijing(); GoToCity go2= new GoToShanghai(); go1.go(); System.out.println("\n"); go2.go(); } }
output:
关闭家门
上锁
离开家
坐火车
到达目的地:北京
关闭家门
离开家
坐飞机
到达目的地:上海
相关文章推荐
- 跟开涛学SpringMVC(4.3):Controller接口控制器详解(3)
- Java内部类的实现原理与可能的内存泄漏
- 跟开涛学SpringMVC(4.2):Controller接口控制器详解(2)
- Unitils集成DBUnit、Spring-单元测试
- 【Java并发编程】之synchronized和Lock
- 跟开涛学SpringMVC(4.1):Controller接口控制器详解(1)
- 跟开涛学SpringMVC(3):DispatcherServlet详解
- Java 7 Fork/Join 框架
- 跟开涛学SpringMVC(2):Spring MVC入门
- Cause: java.sql.SQLException: 无法转换为内部表示
- Spring+SpringMVC+MyBaties问题总结(二
- 安装java和hadoop的过程以及配置环境变量
- SpringMVC 技术详解 MVC简介
- 提炼Java Reflection包含泛型参数
- Eclipse工程导入Android studio之后不识别so文件的解决方法
- Javaweb学习之Ajax介绍
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)
- Java 计时器Timer
- Spring AOP 之 通知、连接点、切点、切面。
- Spring container vs SpringMVC container(webmvc container)