1.代理-动态代理的区别
代理是通过两个对象实现同一个接口,并在代理类中持有被代理对象的实例,代理类在执行接口的方法时可以在执行被代理类的方法的前后加入自己的代码。
动态代理类是通过Proxy.newProxyInstance()方法来创建的,该方法需要一个类加载器、一个你希望该代理实现的接口列表、以及一个InvocationHandler接口的一个实现。InvocationHandler接口的实现就是动态代理类需要做的工作。
2.模板方法
模板方法一般使用抽象类来实现,抽象类负责定义顶级逻辑,剩下的具体算法和实现留给子类去实现。
3.策略模式
策略模式把行为和环境分割开,环境类负责维持和查询行为类,各种具体的算法在策略类中提供,由于算法和环境独立开来,所以算法的增减修改都不会影响环境和客户端。
比如图书销售系统的折扣算法,销售和图书的相关信息就属于环境类和查询类,折扣算法属于算法类,当有新的折扣规则出现的时候,只需要实现折扣算法的接口并将实现类提供给销售类即可。
4.观察者模式
1)观察者实现Observer接口,实现update方法
2)被观察者继承Observerable类,在修改操作后调用setChanged()和notifyObservers()方法
3)被观察者调用addObserver(观察者)将二者关联起来
实现原理很简单,被观察者持有一个观察者的列表,当发生数据变化调用notifyObservers方法时,就遍历调用观察者的update方法。
5.单例模式
使用静态变量保存唯一实例的方法。
6.工厂模式
简单工厂模式不用说了,负责的可循环使用的对象池的方法使用Semaphone关键字实现,参见多线程Semaphone的用法。