A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为其他对象提供一种代理以控制对这个对象的访问
       
        具体代码设计
        1.定义一个接口
        /**
         * 创建一个共用接口
         */
        public interface Subject {
                public void request();
        }

        2.创建一个被代理的实体
        /**
         * 定义一个实体类,这个类将会被Proxy类代理
         */
        public class RealSubject implements Subject {
       
                @Override
                public void request() {
                        System.out.println(this.getClass().getSimpleName() + "真实的请求");
                }
        }

        3.创建一个代理实体
        /**
         * 创建一个代理类,去代理RealSubject
         */
        public class Proxy implements Subject {
                private RealSubject realSubject;
       
                @Override
                public void request() {
                        if (realSubject == null) {
                                realSubject = new RealSubject();
                        }
                        realSubject.request();
                }
        }

        4.创建一个测试类
        public class Test {
                public static void main(String[] args) {
                        Proxy proxy = new Proxy();
                        //调用Proxy对象中方法,实际调用的是RealSubject类中的方法
                        proxy.request();
                }
        }

        静态代理总结:
    代理对象需要与目标对象实现一样的接口,一旦接口增加方法,目标对象与代理对象都要维护.
       
        如何解决静态代理中的缺点呢?答案是可以使用动态代理方式


##代理模式和装饰者模式区别

        1.两种模式的定义
        代理模式:为其他对象提供一种代理以控制对这个对象的访问
        装饰者模式:动态地给一个对象添加一些额外的职能

        2.代理模式注重的是隔离限制,让外部不能访问你实际的调用对象.
          装饰模式注重的是功能的拓展,在同一个方法下实现更多的功能。

       

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马