public class Spike
{
public static void main(String[] args)
{
Counter a = new Counter();
System.out.println(a.increment());
System.out.println(a.anotherIncrement());
Counter b = new Counter();
System.out.println(b.increment());
}
}
class Counter
{
private static int count = 0;
public int increment()
{
return count++;
}
public int anotherIncrement()
{
return ++count;
}
}
count是静态变量,为所有对象所共享,因此不管a.increment()还是b.increment()都会使count持续增加。 increment()方法返回当前count值,然后count增加1 antoherIncrement()方法让count增加1,然后返回count值 第一次a.increment()返回值为0,此时count值为1 第二次a.anotherIncrement()先让count+1再返回,返回值为2 第三次b.increment()先返回count当前值2,然后count+1
AOP的概念是Aspected Oriented Programming 面向方面编程。 好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注。 实现AOP有几种方式: 1.Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态代理来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等 2.Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口 3.三使用标注(@AspectJ)实现AOP AOP 和 OOP的区别:
```html
1. 面向方面编程 AOP 偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。
2. 面向对象编程 (oop) 则是对业务分析中抽取的实体进行方法和属性的封装。
```
也可以说 AOP 是面向业务中的动词领域, OOP 面向名词领域。 AOP 的一个很重要的特点是源代码无关性,也就是说如果我们的系统中引用了 AOP 组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态 proxy 模式。
桥接模式: 定义 :将抽象部分与它的实现部分分离,使它们都可以独立地变化。 意图 :将抽象与实现解耦。 桥接模式所涉及的角色