本帖最后由 mvplee 于 2013-6-11 15:01 编辑
在学习反射时就对反射的应用地方很费解,在学习代里设计模式时终于用到了反射,也算用反射小试牛刀。
学习过程中忽略了论坛技术分,有点郁闷,没想到技术分会成为一个问题。
所以有了打算分享自己学习笔记的想法,作为技术人员还是应该有点“共享”、“开源”、精神的,当然了,醉翁之意还是赚点技术分。
代理设计模式简介:代理设计就是指由一个代理主题来操作真是主题,真实主题操作具体的业务,而代理主题负责相关业务,代理à真实à具体业务。 Windows系统提供的快捷方式,可以使任何一个对象同时出现在多个地方而不必修改原始对象。对快捷方式的调用与对原始对象的调用是一样的,快捷方式对于客户端是完全透明的。快捷方式被删除了,不会影响原始对象,但原始对象被删除后,快捷方式将不能使用,这就是一种代理模式的体现。
代理模式的结构:抽象主题:声明真实主题和代理主题的共同接口,这样任何可以使用真是主题的地方都可以使用代理主题。
代理主题:代理主题内含有对真是主题对象的引用,从而使代理主题操作真是主题。代理主题提供一个与真实主题相同的接口,这样就可以在任何时候替代真实主题。
真实主题:代理主题所引用的真实主题。静态代理:
定义代理与真实主题的共同接口:ISubject- public interface ISubject {
- public String print() throws Exception;
- }
复制代码定义真实主题,真实主题实现抽象主题接口,并且会被代理主题所引用:实现ISubject接口 - public class ReaSubjectImpl implements ISubject {
- @Override
- public String print() throws Exception {
- return "This is print() in RealSubject.class!!!";
- }
- }
复制代码定义代理主题:代里类中通过构造接收ISubject接口的子类对象 - public class ProxySubjectImpl implements ISubject {
- private ISubject subject;
- public ProxySubjectImpl(ISubject subject) {
- this.subject = subject;
- }
- @Override
- public String print() throws Exception {
- System.out.println(this.before()); // 调用代理类中的主题
- System.out.println(subject.print()); // 调用真实类主题
- System.out.println(this.after()); // 调用代理类中的主题
- return "Proxy is ending!!!";
- }
- public String before() {
- return "This is before() in ProxySubject.class!!!";
- }
- public String after() {
- return "This is after() in ProxySubject.class!!!";
- }
- }
复制代码测试: - public class TestStaticProxy {
- public static void main(String[] args) throws Exception {
- ISubject subject = null;
- //像代理主题传入真是主题的引用
- subject = new ProxySubjectImpl((ISubject) new ReaSubjectImpl());
- System.out.println(subject.print());
- }
- }
复制代码Sequence图:
|