JDK 动态代理
- 代理类实现
InvocationHandler
接口; - 类中用
bind
:newProxyInstance
绑定{代理对象~真实对象}关系; - 在
invoke
中实现代理逻辑; - 测试中用代理对象绑定真实对象, 代理对象调用方法;
- (另): JDK动态代理使用
Interceptor
;
CGLib 动态代理
- 代理类实现
MethodInterceptor
接口; - 另一个普通类中创建一个代理对象, CGLib中没有bind绑定关系,只是生成代理对象;
- 在
intercept
方法中实现代理逻辑; - 测试中用
代理对象.getProxy(真实对象类.class)
, 代理对象调用方法;
观察者模式
1被观察者 -> 多个观察者
工厂模式 && 抽象工厂模式
都实现同一个接口,这个接口暴露给客户端; e.g.1
2
3
4
5
6
7public interface IProductFactory {...}
public class ProductFactory implements IProductFactory {...}
public class Factory1 implements IProductFactory {...}
public class Factory2 implements IProductFactory {...}
public class Factory3 implements IProductFactory {...}
其中三个工厂Factory1
, Factory2
, Factory3
和抽象工厂ProductFactory
实现同一个接口IProductFactory
.
Builder模式
工厂模式创建对象实际上还是用new关键字,只是封装到了getInstance()方法中
建造者模式还是属于对象的创建模式。是因为对象很大,创建过程本身比较复杂所以割离属性和生成过程
用建造者模式创建对象, 构造器函数本身很简单, 配置类包涵所有的信息, 配置对象作为参数传递给构造器
1 | public class TicketHelper { |
Output:1
2
3
4
5
6构建成年人票逻辑: 成人票
构建有座儿童票逻辑: 有座儿童
构建无座儿童票逻辑: 无座儿童
构建老年人票逻辑: 老人
构建军人和家属票逻辑: 军人及家属
通过TicketHelper构建票信息