模板模式(Template Pattern)
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,即可重定义该算法的某些特定步骤。
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
模板方法模式将主要的方法定义为 final,防止子类修改算法骨架,将子类必须实现的方法定义为 abstract。而普通的方法(无 final 或 abstract 修饰)则称之为钩子(hook)。
关键代码:模板方法在抽象类实现,并加 final 关键词防重写,其他步骤在子类实现。
代码示例
模板抽象类:Template
abstract class Template {
// 开锁
abstract unlock();
// 骑行
abstract ride();
// 上锁
abstract lock();
// 结算
abstract pay();
// 用户使用
public final use() {
unlock();
ride();
lock();
pay();
}
}
具体实现类:
// 扫码开锁的单车
class ScanBicycle extends Template {
public function unlock() {
//扫码开锁
}
}
// 密码开锁的单车
class CodeBicycle extends Template {
public function unlock() {
//密码开锁
}
}