JDK 动态代理

  1. 代理类实现InvocationHandler接口;
  2. 类中用bind:newProxyInstance绑定{代理对象~真实对象}关系;
  3. invoke中实现代理逻辑;
  4. 测试中用代理对象绑定真实对象, 代理对象调用方法;
  5. (另): JDK动态代理使用Interceptor;

CGLib 动态代理

  1. 代理类实现MethodInterceptor接口;
  2. 另一个普通类中创建一个代理对象, CGLib中没有bind绑定关系,只是生成代理对象;
  3. intercept方法中实现代理逻辑;
  4. 测试中用代理对象.getProxy(真实对象类.class), 代理对象调用方法;

观察者模式

1被观察者 -> 多个观察者

工厂模式 && 抽象工厂模式

都实现同一个接口,这个接口暴露给客户端; e.g.

1
2
3
4
5
6
7
public 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class TicketHelper {

public void buildAdult(String info) {
System.err.println("构建成年人票逻辑: " + info);
}

public void buildChildrenForSear(String info) {
System.err.println("构建有座儿童票逻辑: " + info);
}

public void buildChildrenNoSeatt(String info) {
System.err.println("构建无座儿童票逻辑: " + info);
}

public void buildElderly(String info) {
System.err.println("构建老年人票逻辑: " + info);
}

public void buildSoldier(String info) {
System.err.println("构建军人和家属票逻辑: " + info);
}
}

public class TicketBuilder {
public static Object builder(TicketHelper helper) {
System.out.println("通过TicketHelper构建票信息");
return null;
}
}

public class TicketTest {
public static void main(String[] args) {
TicketHelper helper = new TicketHelper();
helper.buildAdult("成人票");
helper.buildChildrenForSear("有座儿童");
helper.buildChildrenNoSeatt("无座儿童");
helper.buildElderly("老人");
helper.buildSoldier("军人及家属");
Object ticket = TicketBuilder.builder(helper);
}
}

Output:

1
2
3
4
5
6
构建成年人票逻辑: 成人票
构建有座儿童票逻辑: 有座儿童
构建无座儿童票逻辑: 无座儿童
构建老年人票逻辑: 老人
构建军人和家属票逻辑: 军人及家属
通过TicketHelper构建票信息