模板方法设计模式
-
什么是设计模式?
- 某个问题的固定的解决方案。(可以被重复使用。)
-
你知道哪些设计模式?
- GoF设计模式:
- 通常我们所说的23种设计模式。(Gang of Four:4人组提出的设计模式)
- 单例模式
- 工厂模式
- 代理模式
- 门面模式
- 责任链设计模式
- 观察者模式
- 模板方法设计模式
- …
- JavaEE设计模式:
- DAO
- DTO
- VO
- PO
- pojo
- …
- …
- GoF设计模式:
-
什么是模板方法设计模式?
- 在模板类的模板方法当中定义核心算法骨架,具体的实现步骤可以延迟到子类当中完成。
-
模板类通常是一个抽象类,模板类当中的模板方法定义核心算法,这个方法通常是final的(但也可以不是final的)
-
模板类当中的抽象方法就是不确定实现的方法,这个不确定怎么实现的事儿交给子类去做。
-
一个简单的模板方法设计模式
package com.template; /** * Teacher和Student都是Person * 1、Person就是模板设计模式当中的模板类 * 2、day()方法就是模板设计模式当中的模板方法 */ public abstract class Person { // 模板方法 // 添加了final之后,这个方法无法被覆盖,核心的算法可以得到保护 // 模板方法当中定义核心算法骨架,具体的实现步骤可以延迟到子类当中完成。 // 核心算法得到了保护,不能被改变。算法也得到了重复使用 // 代码也得到了复用,因为算法中某些步骤的代码是固定的。这些固定的代码不会随着子类的变化而变化,这一部分代码可以写到模板类当中 public final void day(){ qichaung(); chifan(); shangban(); shuijiao(); } public void qichaung() { System.out.println("起床"); } public void chifan() { System.out.println("吃饭"); } // 这一步骤由子类来做 public abstract void shangban(); public void shuijiao() { System.out.println("睡觉"); } }
package com.template; public class Teacher extends Person{ @Override public void shangban() { System.out.println("教书"); } }
package com.template; public class Student extends Person{ @Override public void shangban() { System.out.println("上学"); } }