反射与代理设计模式-基础代理设计模式

 时间:2026-02-15 15:58:59

1、基础代理设计整体架构图:.

反射与代理设计模式-基础代理设计模式

2、     在实际的开发之中有两大核心设计模式:工厂设计模式、代理设计模式。我们本次就利用反射进行代理设计模式的加强。 现在分析代理设计模式的问题:

代理设计模式的核心本质在于:一个接口有两个子类,一个负责真实业务,另外一个负责与真实业务有关的所有辅助性的操作。那么按照这样的原则,一个基础的代理设计结构如下:

package com.gwolf.design;

import java.lang.reflect.Constructor;

//代理设计的核心在于需要有一个核心的操作接口

interface ISubject {

        //直返是整体的核心业务

        public void eat();

}

class RealSubject implements ISubject {

        @Override

        public void eat() {

                System.out.println("饿了一定要吃饭!");

        }

        

}

class ProxySubject implements ISubject {

        private ISubject subject;

        

        public ProxySubject(ISubject subject) {

                this.subject = subject;

        }

        

        public void prepare() {

                System.out.println("需要准备食材,收拾食材!");

        }

        

        public void clear() {

                System.out.println("洗刷碗筷");

        }

        @Override

        public void eat() {

                this.prepare();

                this.subject.eat();

                this.clear();

                

        }

}

class Factory {

        @SuppressWarnings("unchecked")

        public static <T> T getInstance(String className) {

                T t = null;

                try {

                        t =  (T)Class.forName(className).newInstance();

                } catch (Exception e) {

                        e.printStackTrace();

                }

                

                return t;

        }

        

        @SuppressWarnings("unchecked")

        public static <T> T getInstance(String className,Object obj) {

                T t = null;

                try {

                        Constructor<?> constructor =  Class.forName(className).

                                        getConstructor(obj.getClass().getInterfaces()[0]);

                        

                        t = (T)constructor.newInstance(obj);

                } catch (Exception e) {

                        e.printStackTrace();

                }

                

                return t;

        }

}

public class ProxyDesign {

        public static void main(String[] args) {

                ISubject subject = Factory.getInstance("com.gwolf.design.ProxySubject", 

                                Factory.getInstance("com.gwolf.design.RealSubject"));

                subject.eat();

        }

}

反射与代理设计模式-基础代理设计模式

3、执行我们的main方法:

反射与代理设计模式-基础代理设计模式

4、以上的程序如果结合了反射之后整体的处理会非常的繁杂,而且繁杂的不只是开发端,客户端也很复杂。对于以上的操作客户端不应该关注特别多的内容,也就是说客户端唯一可能需要知道的就是代理是谁,真实是谁,程序可以进行如下修改:修改工厂类。

class Factory {

        @SuppressWarnings("unchecked")

        public static <T> T getInstance(String className) {

                T t = null;

                try {

                        t =  (T)Class.forName(className).newInstance();

                } catch (Exception e) {

                        e.printStackTrace();

                }

                

                return t;

        }

        

        @SuppressWarnings("unchecked")

        public static <T> T getInstance(String proxyClassName,String realClassName) {

                T t = null;

                try {

                        T obj = getInstance(realClassName);//取得真实的接口对象

                        

                        Constructor<?> constructor =  Class.forName(proxyClassName).

                                        getConstructor(obj.getClass().getInterfaces()[0]);

                        

                        t = (T)constructor.newInstance(obj);

                } catch (Exception e) {

                        e.printStackTrace();

                }

                

                return t;

        }

}

反射与代理设计模式-基础代理设计模式

5、修改之后再次执行我们的main方法:

反射与代理设计模式-基础代理设计模式

6、那么现在的问题出现了,在开发中不知道一个项目中有多少个接口,那么如果所有的这些接口都需要使用到代理类会如何?

几乎每一个接口都要编写两个子类,那么假设这所有接口的代理类的功能几乎都一样。之前的这种代理设计严格来讲只是一种最简单的代理设计。所以这种代理设计只能够代理一个接口的子类对象,无法代理更多的接口子类对象,那么这种开发是不可能在实际工作中出现的。要想解决此问题,我们要使用动态代理模式。

反射与代理设计模式-基础代理设计模式

  • 反射与代理设计模式-动态代理设计模式
  • java设计模式之代理设计模式(Proxy)
  • 设计模式之工厂模式
  • Unity 设计模式之 代理模式的实例介绍
  • 反射工厂模式实现满足真正的开闭原则
  • 热门搜索
    青岛旅游图片 春节 旅游 河北旅游职业技术学院 晋城旅游网 圣托里尼岛旅游攻略 成都西岭雪山旅游攻略 绥化旅游 旅游英语对话 日本旅游签证时间 北京春节旅游攻略