跟王老师学反射(十):静态代理模式
主讲教师:王少华 QQ群号:483773664
学习内容
理解代理机制
掌握静态代理
一、代理模式的概念
代理模式就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。
代理模式一般涉及到三个角色
抽象角色:声明真实对象和代理对象的共同接口
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能替代真实对象相同的接口以便在任何时刻都能替代真实对象。同时,代理对象可以再执行真实对象操作时,附加其他的操作,相当于对象真实对象进行封装
真实角色:代理角色代表的真实对象,是我们最终要应用的对象
二、代理模式实现:
需求:
正常业务,打印输出HelloWorld
添加打印日志的功能,即在正常业务方法之前和之后,写入日志
(一)抽象角色
1 2 3 4 |
|
(二)真实角色
1 2 3 4 5 6 |
|
(三)代理角色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
(四)使用代理类
1 2 3 4 5 6 |
|
三、静态代理
上面代码演示的就是静态代理,静态代理就是指由程序员创建代理类,即代理类在程序运行前就已经存在的。
这种代理方式,缺点很显:
1)代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
2)代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了
那么如何避免静态代理的不足呢,那么我们可以使用动态代理,下节课我们就学习如何使用动态代理