读书人

小弟我的设计模式-模板方法2

发布时间: 2012-10-23 12:12:22 作者: rapoo

我的设计模式--模板方法2
以上就是我们的模板方法了,典型特点就是采用了继承的方式来处理,而不是委托的方式。
从上面的代码中,我们可以看出,我们将顶级方法定义为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();

读书人网 >软件开发

热点推荐