子墨对酒《三国杀》里论模式(伍)模板方法

如果你是J2EE的爱好者,相信你对模板方法并不陌生。是的,很多框架的设计都是基于模板方法。在我看来,我们也能用面向方面的概念来理解模板方法(当然这么说可能不合适)。模板方法的就是将它的部分实现逻辑交给子类去实现。而对于原始基类来说,只是提供一个模板。模板方法完全使用了OO语言的后期动态绑定。

我补充一段模板方法的代码相信大家能对这种架构恍然大悟

public abstract class BaseDBOperator 
{
      public void insert() 
     {
	doSomeThingBeforeInsert();
        doSomeThing();
	doSomeThingAfterInsert();
     }

    protected void doSomeThingBeforeInsert();
    protected void doSomeThingAfterInsert();
    protected abstract void doSomeThing();
  
}

我们发现insert的方法已经生成固定的模板,你所要做的就是实现doSomething这个方法。这样就可以将一部分实现提交的到子类。其实我们从架构的角度来看的话,对于insertBeforeInsert这个方法实际上是再doSomething之前切了一个切面。这就是我们说的面向方面。实际上很多框架都提供了面向方面的功能,但是实现的方案可能是多种多样。可能是动态代理,可能是CGLib这种继承等等。但不论哪种,都可以看成是面向方面的概念的实现。好了我们回到工厂方法本身。我们回想一下,实际上对于before和after,不就是提供给我们上下文么?我们知道Activity的回调,它提供一个上下文的环境。Activity的onCreate必须要包含在这个上下文环境中。其实这种以回调的形式给你的也是一种模板方法的一种实现。我们来看看<三国杀>这款游戏:

我们假设说三国杀登陆以后的每一步操作都要进行认证操作。也就是说,你的每一个请求都会检测你的session是否失效,如果失效,那么你将跳出游戏,启动登陆页面:


如果是这样的话是否要在每个服务上增加方法呢?~我们可以参考这种概念设计一种模型

class AbsRequest{
      pubic void request() {
              this.sessionCheck();
             doSomething();
    }
   abstract void doSomeThing();
   public void sessionCheck(){...}
}

我们可以看到我们将session的检测写成了统一的接口,在request请求doSomeThing执行之前使用相同的逻辑。当然实际不会这么简单。但是我们可以参考这种模型来实现我们需要的业务逻辑。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值