代理模式以及在Android中的使用

本文详细介绍了代理模式,包括定义、好处、UML图,并通过静态代理和动态代理的实现进行讲解。动态代理在Android中的典型应用如Retrofit,通过动态代理实现接口调用。文章还深入解析了动态代理的源码,揭示了Proxy类和InvocationHandler接口的工作原理。
摘要由CSDN通过智能技术生成

本文涉及java中的一些反射知识,如果你对反射这部分不太熟悉,建议先去了解一下反射知识,或者看一下我的这篇文章 Java反射以及在Android中的使用

代理模式

一、定义

某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

举例说明:

代理模式从字面上就是我们理解的生活中那个中介代理,比如公司A(原对象)为海外公司,消费者B(某一个对象)直接从公司A购买商品需要各种各样复杂的步骤,这时候就出现了代理人C(代理对象),让他来替我们去处理那些复杂的步骤,我们只需要告诉代理人C我们需要什么商品就可以了,由代理人C去跟公司A进行购买,消费只需要等着收快递,其他的不用关心。

二、使用代理好处

1、通过引入代理对象的方式 来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性;

2、通过代理对象对原有的业务增强;

三、UML图

公共接口角色:定义了委托角色代理角色的共同接口或者抽象类。

委托角色(公司A) :实现或者继承抽象主题角色,定义实现具体业务逻辑的实现。

代理角色(代理C) : 实现或者继承抽象主题角色,持有委托角色的引用,控制和限制委托角色的实现,并且拥有自己的处理方法(预处理和善后)。

特点:

  • 委托角色代理角色共同继承同一个接口或者实现抽象类

  • 代理角色持有委托角色对象的引用

四、静态代理

根据上面的例子,我们来实现一个静态代理:

静态代理在使用时,需要先定义接口或者抽象类,委托类代理类一起实现相同的接口或者是继承相同抽象类。一般来说,委托类代理类是一对一的关系,当然一个代理对象对应多个委托类也是可以的。

步骤 :定义公共接口——>创建委托类(公司A)——>创建代理类(代理C)——>访问(消费者执行)

1、定义公共接口

/**
 * @author : EvanZch
 * description: 抽象主题角色,商家和代理销售这个操作
 **/
public interface IFactoryA {
   
    void saleManTools(String size);
}

2、委托类 (公司A)

/**
 * @author : EvanZch
 *         description: 公司A, 实现IFactory
 **/
public class FactoryA implements IFactoryA {
   
    /**
     * 实现具体的业务逻辑
     *
     * @param size
     */
    @Override
    public void saleManTools(String size) {
   
        System.out.println("公司A——>出货:" + size + "MM");
    }
}

3、代理类 (代理C)

/**
 * @author : EvanZch
 * description: 代理C,实现IFactory,并持有真实对象FactoryA引用
 **/
public class ProxyC implements IFactoryA {
   

    private IFactoryA factory;
    /**
     * 持有被代理角色的引用
     * @param iFactory
     */
    public void setFactory(IFactoryA iFactory) {
   
        this.factory = iFactory;
    }

    /**
     * 对真实对象方法进行增强
     * @param size
     */
    @Override
    public void saleManTools(String size) {
   
        doBefore();
        factory.saleManTools(size);
        doAfter();
    }

    private void doBefore() {
   
        System.out.println("代理C——>根据客户需求定制方案"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值