【代理模式/装饰模式】

代理模式通常指为其他对象提供一种代理以控制对另一个对象的访问,简单的说,就是当我们无法或不能直接访问某个对象时可以通过一个实现了与该对象相同接口的一个类来实现对该类的间接访问。

装饰模式是在代理模式的基础上进行扩展,增加一些被代理类不存在的类,以扩展被代理类的一些功能。这种扩展并不破坏原有类的功能。

// 实现

public interface Subject {
    public void method();
};
public class RealSubject {
    public void method() {
        // 执行真实的函数
    }
}public class ProxySubject {
    private RealSubject mRS;
    public void setSubject(RealSubject rs) {
        mRS = rs;
    }
    public void method() {
        // 其他操作
        mRS.method();
    }
}

// 调用
ProxySubject ps = new ProxySubject();
ps.setSubject(new RealSubject());
ps.method(); // 实际执行的是RealSubject的method

代理模式需要注意:

  1. 代理类和被代理类最好实现相同的接口(具有相同的api),以保证对用户的透明性;而装饰模式可以扩展新的api,以实现对原有类功能的扩展
  2. 代理类需要持有一个被代理者的引用,代理类执行的方法实际上就是简单的使用被代理类的引用调用方法;

代理类在android的使用:

  1. 反射机制,使用反射可以创建一个创建一个动态代理,让我们在某一个类的所有函数之前执行某些通用的操作,例如日志打印,数据埋点等(具体可以参考《商云数据埋点接入探究.md》)
  2. 第三方库的优化,当某一第三方库的类无法满足我们的需要时,可以使用装饰方式扩展新的api
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值