如果你是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执行之前使用相同的逻辑。当然实际不会这么简单。但是我们可以参考这种模型来实现我们需要的业务逻辑。

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

  1. 子墨对酒《三国杀》里论模式(一)工厂模式

    有人说模式会让代码变的优雅,也有人说模式会让你的代码更利于扩展.我个人觉得这些说 的都对.但是滥用模式一样会成为被人诟病的痛点.与其说面向对象语言考察的主要标准是语法,不如考察对模式的理解更加切合实际 ...

  2. 子墨对酒《三国杀》里论模式(肆)单例模式

    当设计模式的观点被众人所推崇的时候,单例模式似乎已经成了掌握设计模式时候要掌握的基础模式.当然我并不认为设计模式中有基础和非基础之分,我只觉得模式的应用有普遍和非普遍之别.单例模式的普遍并不体现在应用 ...

  3. 子墨对酒《三国杀》里论模式(三)适配器模式

    如果你是一个Android程序员,那么你一定对适配器模式情有独钟.如果你还不知道 适配器模式为何物,你还陶醉在自己对AdapterView子类运用的有多熟的暗中自喜中,希望这篇文章能给你当头棒喝.人们 ...

  4. 子墨对酒《三国杀》里论模式(二)门面模式

    学 习模式的人对门面模式都不会太陌生,如果说工厂模式是对对象的高层次抽象的话,那么门面模式就是对对象,就是一种更高层次的抽象.这么说可能不好理解,我 们举个很好理解的例子,我们知道cpu的目的是为了运 ...

  5. 子墨庖丁-Gson的源码分析(1)-开篇

    因为工作的关系,使用到了Gson,先暂停了书写Proguard的文章,回到Gson的研究.当然也不会总是研究Gson,我会两个项目跳着来.完全按照自己的兴趣来.我个人觉得Gson是一个非常优秀的jso ...

  6. 子墨庖丁Android的ActionBar源代码分析 (一)实例化

    假设你从事过Androidclient开发,相信你对ActionBar这套框架并不陌生,或者说你并不了解它,可是你应该时不时的要跟它打交道.抛开ActionBar的实现不说,ActionBar实际上是 ...

  7. 子墨掩码到底是干嘛的?

    前言 基本上每台计算机的网卡配置里都有这么一项子墨掩码的配置,子墨掩码的值一般都是255.255.255.0 ,那么这个玩意到底是干嘛的呢?今天我们就来揭开它神秘的面纱! IP分配 没错 ,子墨掩码的 ...

  8. 子墨庖丁Android的ActionBar源码分析 (一)实例化

    如果你从事过Android客户端开发,相信你对ActionBar这套框架并不陌生,或者说你并不了解它,但是你应该时不时的要跟它打交道.抛开ActionBar的实现不说,ActionBar实际上是对An ...

  9. 鸿蒙抖音直播发言人是谁,抖音惊现“鲁班大师”,山村小杰万能子墨齐上阵,真实身份遭曝光...

    黄梅戏<夫妻双双把家还>,一直都深受广大民众的喜爱,这首歌更是传唱祖国大地.小编非常喜欢这首歌中的几句歌词:"你耕田来我织布,我挑水来你浇园."这句歌词,大概描绘出了很 ...

最新文章

  1. 天平游码读数例题_量筒、天平经典习题
  2. 【转载】插件自动升级
  3. 工作日志-W1444
  4. python整数类型-python基础数据类型一(整数类型和布尔值)
  5. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】...
  6. Chrome 控制台不完全指南
  7. RHQ指标的WildFly子系统
  8. 基于FPGA实现ADC7768数据采集系统设计(8路)
  9. load()是python文件操作的函数_python基础总结(函数,文件操作)
  10. CodeForces 379 E New Year Tree Decorations
  11. java常用类有哪些_java中的常用类有哪些
  12. SVN 与 CVS 在【版本管理】上的区别~
  13. 如何搭建MySQL数据库,常用的数据库命令
  14. 论【软件工程是不是教会不怎么会写程序的人软件开发】
  15. 信息产业部颁发计算机网络工程师查询,网络工程师证书查询验证网址及方法
  16. 一个页面播放多个视频
  17. tolower c语言,tolower_字符串 | Strings_C_参考手册_非常教程
  18. linux的炒股软件“全胜”
  19. QQ2012 Beta1 (支持窗口合并、20人视频)
  20. 基于matlab的神经网络设计,matlab神经网络训练图片

热门文章

  1. Rog 幻14 2020 安装ubuntu20.04/一些小问题和美化
  2. 经济与生活_01沉没成本
  3. [云炬商业计划书笔记]
  4. WM5的智能手机D600共享电脑上网设置
  5. 全手动搭建Kubernetes集群——Master管理节点和Node工作节点部署
  6. webservice 天气预报的接口
  7. android 进度条边框,android用户界面-组件Widget-进度条ProgressBar
  8. java if作业_19201528- JAVA所有作业总结
  9. e260dn打印机故障灯_施乐常见打印机故障
  10. 射频工程师必须知道的:PA功率放大器那些事!