以上就是我们的模板方法了,典型特点就是采用了继承的方式来处理,而不是委托的方式。
从上面的代码中,我们可以看出,我们将顶级方法定义为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();
本文详细解读了模板方法设计模式的核心概念、结构和应用案例。通过剖析模板方法模式的特点,如继承与权限控制,以及其在实际编程中的表现形式,如Servlet的工作流程,深入探讨了如何利用此模式实现灵活的代码结构。以电影《阿凡达》为例,展示了如何通过模板方法模式定义顶层规则,并允许子类进行扩展。同时,文章还提供了实例代码,演示了阿汤哥角色如何覆盖或不覆盖模板中的某些行为,从而实现定制化的功能实现。

被折叠的 条评论
为什么被折叠?



