`

我的设计模式--模板方法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();
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics