版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50600552
Java 模板方法模式的实现
1.定义:
定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使子类可以不改变一个算法的结构。可以重新定义该算法的某些特定步骤。
2.使用场景:
(1).多个子类有公有的方法,并且逻辑基本相同。
(2).重要、复杂的算法,可以把核心算法设计为模板方法,周边相关的细节则在子类中实现。
(3).重构时,模板方法模式是一个经常使用的模式,把相同的代码抽到父类中,然后通过钩子方法函数约束其行为。
3.UML类图
1.定义:
定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使子类可以不改变一个算法的结构。可以重新定义该算法的某些特定步骤。
2.使用场景:
(1).多个子类有公有的方法,并且逻辑基本相同。
(2).重要、复杂的算法,可以把核心算法设计为模板方法,周边相关的细节则在子类中实现。
(3).重构时,模板方法模式是一个经常使用的模式,把相同的代码抽到父类中,然后通过钩子方法函数约束其行为。
3.UML类图
4.模板方法的简单示例
模板方法的实际是封装一个固定的流程,就像是一套执行模板一样,第一步该做什么,第二部该做什么都是已经
在抽象类中定义好了。而子类可以有不同的算法实现。在框架不被修改的情况下实现某些步骤的算法替换。下面
打开计算机的的动作的简单模板方法。
5.代码实战:
AbstractComputer .java
package abs;
/**
*
* @author lidong
*
*/
public abstract class AbstractComputer {
public void powerOn() {
System.out.println("打开电源");
}
public void checkHardware() {
System.out.println("检查硬件");
}
public void loadOS() {
System.out.println("加入操作系统");
}
public void login() {
System.out.println("小白的计算机无验证,直接进入系统");
}
public final void startUp(){
System.out.println("=====开机==start======");
powerOn();
checkHardware();
loadOS();
login();
System.out.println("=====关机==stop======");
}
}
package abs;
/**
* 程序员的计算机
* @author lidong
*
*/
public class CoderComputer extends AbstractComputer {
@Override
public void login() {
super.login();
System.out.println("程序员只需要进行用户和密码的验证就可以了");
}
}
public class MilitaryComputer extends AbstractComputer{
@Override
public void checkHardware() {
super.checkHardware();
System.out.println("检查硬件防火墙");
}
@Override
public void login() {
super.login();
System.out.println("进行指纹识别");
}
}
package abs;
测试程序:
public class Test {
public static void main(String[] args) {
AbstractComputer comp = new CoderComputer();
comp.startUp();
comp = new MilitaryComputer();
comp.startUp();
}
}
结果:
=====开机==start======
打开电源
检查硬件
加入操作系统
小白的计算机无验证,直接进入系统
程序员只需要进行用户和密码的验证就可以了
=====关机==stop======
=====开机==start======
打开电源
检查硬件
检查硬件防火墙
加入操作系统
小白的计算机无验证,直接进入系统
进行指纹识别
=====关机==stop======
Demo的下载地址:
https://github.com/lidong1665/JAVA_DESIGN_PATTERNS