以上就是我们的模板方法了,典型特点就是采用了继承的方式来处理,而不是委托的方式。
从上面的代码中,我们可以看出,我们将顶级方法定义为fianl,这样子类就无法修改该方法,就达到了顶级规则不允许改变的原则。
同时将被实现的方法修饰了protect,如果是为子类及同包的类才能继承,达到权限控制的目的。因为客户端不关心这些方法。
比较常见的模板方法就是servlet。 加载--init--service--destory--释放内存
如果哪天编剧说再加个情节吧。那就加上重生环节吧。可以理解为原来的各个环节中,我们把重生这个环节默认为重生成功了。
//电影 阿凡达
public abstract class Avatar
{
//电影上演
public final void play()
{
daRu();
ooxx();
epiphqny();
fight();
end();
}
//以下就是我们定义的顶级规则,只能去实现,无权修改流程
//打入精灵内部
protect abstract void daRu();
//发生纯洁关系
protect abstract void ooxx();
//重生
protect void epiphqny()
{
//todo 重生了--成功
}
//与城管的生死搏斗
protect abstract void fight();
//路人挂,美女归
protect abstract void end();
protect void luRenJia()
{
//我是路人甲
}
}
那我们的阿汤哥的实现可以覆盖重生,也可以不覆盖重生,因为已经有一个默认的实现了。
理论讲解:
一般模板方法中的方法我们区分为:
方法:
---模板方法:定义顶级规则的方法,本案中的play()方法
---基本方法
---抽象方法:抽象类提供一个抽象方法,具体由子类来实现。本案中daRu()方法
---具体方法:由抽象类声明并实现,子类并不实现或置换。本案中luRenJia()方法
---钩子方法:由抽象类声明并实现,子类会加以扩展。一般抽象类空实现,具体由子类来实现,本案中的epiphqny();
从上面的代码中,我们可以看出,我们将顶级方法定义为fianl,这样子类就无法修改该方法,就达到了顶级规则不允许改变的原则。
同时将被实现的方法修饰了protect,如果是为子类及同包的类才能继承,达到权限控制的目的。因为客户端不关心这些方法。
比较常见的模板方法就是servlet。 加载--init--service--destory--释放内存
如果哪天编剧说再加个情节吧。那就加上重生环节吧。可以理解为原来的各个环节中,我们把重生这个环节默认为重生成功了。
//电影 阿凡达
public abstract class Avatar
{
//电影上演
public final void play()
{
daRu();
ooxx();
epiphqny();
fight();
end();
}
//以下就是我们定义的顶级规则,只能去实现,无权修改流程
//打入精灵内部
protect abstract void daRu();
//发生纯洁关系
protect abstract void ooxx();
//重生
protect void epiphqny()
{
//todo 重生了--成功
}
//与城管的生死搏斗
protect abstract void fight();
//路人挂,美女归
protect abstract void end();
protect void luRenJia()
{
//我是路人甲
}
}
那我们的阿汤哥的实现可以覆盖重生,也可以不覆盖重生,因为已经有一个默认的实现了。
理论讲解:
一般模板方法中的方法我们区分为:
方法:
---模板方法:定义顶级规则的方法,本案中的play()方法
---基本方法
---抽象方法:抽象类提供一个抽象方法,具体由子类来实现。本案中daRu()方法
---具体方法:由抽象类声明并实现,子类并不实现或置换。本案中luRenJia()方法
---钩子方法:由抽象类声明并实现,子类会加以扩展。一般抽象类空实现,具体由子类来实现,本案中的epiphqny();