Java中实现代理模式

代理模式

代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替实际对象的对象。这些操作通常涉及与“实际”对象的通信,因此代理通常充当这中间人的角色。下面通过代码结构演示一遍

1. 定义一个接口

public interface Interface { void doSomething(); void somethingElse(String arg); }

2. 定义一个实际对象实现这个接口

public class RealObject implements Interface {

    @Override
    public void doSomething() {
        System.out.println("实现---doSomething");
    }

    @Override
    public void somethingElse(String arg) {
        System.out.println("实现---somethingELse");
    }
}

3. 构建一个simpleProxy代理类同时实现了Interface

public class SimpleProxy implements Interface {
    //定义一个接口类型变量强制将变量设置为接口类型
    private Interface proxied;
    public SimpleProxy(Interface proxied) {
        this.proxied = proxied;
    }

    @Override
    public void doSomething() {
       System.out.println("我又实现了---doSomething");
    }

    @Override
    public void somethingElse(String arg) {
        System.out.println("我又实现了---somethingElse");
    }
}

测试使用代理类来调用方法

public class SimpleProxyDemo {
    public static void consumer(Interface iface) {
        iface.doSomething();
        iface.somethingElse("hello world");
    }

    public static void main(String[] args) {
        consumer(new RealObject());
        //将真实对象作为构造参数传入
        consumer(new SimpleProxy(new RealObject()));
    }
}

consumer()接受的Interface,所以它无法知道正在获得的到底是RealObject还是SimpleProxy,因为这两者都实现了Interface。但是SimpleProxy已经被插入到了客户端和RealObject之前,因此它会执行,然后调用RealObject上相同的方法

注:使用代理模式其核心是在代理类中定义一个接口类型的成员变量

参考 Think In Java

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 1 场景问题# 1.1 访问多条数据## 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在...
    七寸知架构阅读 3,028评论 1 52
  • 文/月明红红 天净沙 秋暮落叶留痕,夜深寒露稀珍 冷雨轻推雪纷 恍然如梦,始知冬日临门 假如我是一片落叶 我要轻轻...
    月明红红阅读 206评论 2 8
  • 我们是一个典型的三口之家,今年二月,孩子独自去英国读书,家里就剩我和孩子爸两人。其实对我们来说,这样的变化...
    NancyQi阅读 497评论 5 8