AOP

面向切面编程,又译作面向方面编程,英文是 Aspect Orient Programing ,简称 AOP。AOP 是对面向对象编程 (OOP) 的一种补充,并不是 OOP 的终结者,AOP 和 OOP 通常是相互协作的关系,OOP 是软件开发史上的伟大思想,但是再伟大的思想也会有其不足,人类是进化的,所以不足时会被解决的,AOP 正是用来弥补 OOP 缺点的。

面向对象编程思想是将属性、方法封装到类中,又类派生出对象,通过对象访问方法与属性,这与现实社会是十分符合的,例如人可以作为一个类,你就是派生出来的对象,你具有身高、体重、月薪等等无数的属性,以及挣钱、花钱、买房、买车、娶老婆等等方法。至此看来面向对象编程时完美的、无懈可击的。

但是,就像没有免费的午餐一样,天下也没有十全十美的事物。

假设一个公司所有员工都要在上班时候在指定机器上面刷卡,而我们需要在系统中为每类职工设计特定的类,如美工人员类、后台开发人员类、管理人员类等等,现在就是美工人员、后台开发人员、管理人员都要在上班时候刷卡,有多种解决方法:

1、为每类员工添加刷卡方法,尽管这些方法的操作都是完全相同的,可见冗余开始出现了。

image

2、定义一个抽象的父类作为所有员工的父类,然后在这个父类中定义非抽象的刷卡方法,耶!完美的解决了需求,而且还可以在子类(即具体的员工类)中根据特定需求重写刷卡方法。可是在 java 中只支持单继承,也就是说如果用这种解决方法,那么这些具体员工类就无法继承其他父类了。有人可能会说用接口啊,所有员工都实现某个接口,可是接口中无法定义非抽象方法,还是要在具体的员工类中写一大堆重复的无聊的代码,很多人最怕这个了,而且也会冗余。

image

3、用 AOP 解决,AOP 既然叫做面向切面编程,就是在一个切面实现自己的代码,在这个例子中,可以利用 AOP 在员工执行踏入门槛方法之后立即调用 AOP 的一个刷卡方法,这个 AOP 方法只需编写一次,可以在任何员工类插入此方法(AOP 的术语叫织入 weave),当然 AOP 不会破坏原来的代码,只是依照原来的对象创建一个代理对象,对代理对象进行操作。

image

AOP 就是这样一种对系统横向切入的一种编程思想,利用 AOP 我们可以实现日志系统、系统性能分析等等,还有超市的打折促销也可以用 AOP 实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值