白话设计模式之--面向切面的编程

来源:互联网 发布:mac鼠标右键怎么按 编辑:程序博客网 时间:2024/06/05 17:22

了解完设计模式之后,本人接触到了面向切面编程。其实设计模式本身更多的是一种思想。因此我觉得你掌握某些书中的一些例子没有什么用处,更重要的是要掌握思想精髓,然后能在实际的项目中来进行应用。我们做开发的时候,很多时候并不是我们不知道技术如何实现,我觉得更多的是因为没有理清楚你想要做的事情的原理;

        比如你在做一个有关业务流程的软件,你不清楚业务的流程,那么就做不好开发;

        又比如你在做一个关于算法的代码,你不清楚背后的数学模型和数学算法,那么估计也不可能做好这一块。

因此我觉得写代码是很简单的,因为毕竟那些对象都是很听话的;而理解所要实现的业务流程和理解所要实现算法的数学原理是不容易的;这可能也就是真正的大牛和普通开发者的区别。

        当然这里多说一句,本人也参加过一些公司的面试,发现很多面试官压根不知道如何面试技术;就我看来,你面试一些能够百度到的概念性问题实在没什么意义;还不如让他做一个单一的逻辑性相对复杂的问题。或者找一个现有的技术,问问他们的实现思路;这样就可以考察出一个人的能力。因为能够百度到的概念,就类似于文字;我们做开发要实现的是造句,而不是识别字;当然有人说你都不认识字怎么造句;但是我想说的是,造句的能力比认字重要的多。咬文嚼字,在软件行业最终会导致项目难以维护,没有什么实际意义。

        所谓面向切面编程,其本质也是一种对重复过程的封装;下面我举几个例子帮助大家开拓思路:

例子一:凡是对象,每一个都要经过    分配内存》初始化》使用》销毁》回收内存的过程;这是一个通用的过程在Java中,我们是不是每一个对象使用之前必须要经过虚拟器的

加载》连接》初始化》使用》卸载 过程;其实普通的对象在初始化之后才可以使用,也就是我们调用new产生的对象,而定义为final static的变量可能在连接阶段就已经分配好了内存并初始化好了变量值;因此Java虚拟机的加载类的机制其实就是一个面向切面的过程;他就是将  分配内存》初始化》使用》销毁》回收内存   这个过程当作一个切面;因此我们才能够这么方便的使用Java来进行对业务方面的逻辑处理。

例子二:再说到代理模式,代理模式是代理对象代理了一个主对象的一些功能;所以调用代理的过程是一样的;new一个代理对象,实现相应的业务接口;就这么简单;所以Java提供了动态代理机制;通过动态代理,我们只需要给制定的地方注入我们的子代理实例,需要实现的接口方法,和方法参数;在动态代理中,他会将上面这个  代理对象执行相应的代理接口方法的一个步骤当作一个切面;来进行统一的实现;因此我们不用手动去给每一个代理类实现A.do()的步骤了。

例子三:在生活中,一个产品会有很多厂家来生产,但是是不是很多产品的功能都很类似;那是因为行业有标准,有规范;你可以将标准也看作是一个切面。就是标准制定了这个产品的目的,用途;里面包含的有害元素最大值等等;因此面向切面也是很符合生活逻辑的,正式因为有了标准,所以厂家才可以专心的去实现自己的功能,知道自己需要干什么。     

       通过以上的例子,大家应该差不多对切面这个概念有了一个初步的认识吧。现在在去看书本,我相信你会有一番不同的感悟。凡事都有两面性,动态代理固然有很多好处;但是也有很多的缺点。希望大家每次看待一个技术都能这样看到。


0 0
原创粉丝点击