Java设计模式之代理模式

Java设计模式之代理模式

一、什么是代理模式
1.1 代理模式简介
在某些情况,某个对象需要对调用者不直接公开调用接口,而是通过代理对象进行请求,避开对真实对象的访问。这种设计模式被称为——代理模式,在Android源码Frameworks层大量使用了代理模式进行代码设计,我们经常使用的×××Manager类都是代理×××ManagerService服务接口类。可阅读我写的另一篇关于框架层系统服务的博客:
http://blog.csdn.net/u012169524/article/details/51264979

1.2 代理模式角色组成
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可附加其他操作。

1.3 代理模式的优点
1、职责清晰:
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
2、提高安全:
代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
3、高扩展性:
代理角色实现抽象角色现有的接口的方法之后,还可以在现原有基础上进行功能扩展,而不用去改动抽象角色接口。

二、应用场景举例及代码实现
抽象角色:面膜
真实角色:老板
代理角色:微商

2.1 抽象角色 首先假设定义国家面膜标准接口
public interface FacialMask {

    public void Replenishment();// 补水

    public void Moisture();// 保湿

}

2.2  真实角色 面膜老板遵守国家标准,实现接口进行生产
public class FacialMaskBossA implements FacialMask {

    @Override
    public void Replenishment() {
        System.out.println("[面膜老板A] 补水面膜");
    }

    @Override
    public void Moisture() {
        System.out.println("[面膜老板A] 保湿面膜");
    }

}

public class FacialMaskBossB implements FacialMask {

    @Override
    public void Replenishment() {
        System.out.println("[面膜老板B] 补水面膜");
    }

    @Override
    public void Moisture() {
        System.out.println("[面膜老板B] 保湿面膜");
    }

}

2.3  代理角色 微商面膜代理,遵守国家标准实现接口,消费者选择的品牌通过构造函数传递,最后调货
public class WeChat implements FacialMask {

    FacialMask mFmImpl;

    public WeChat(FacialMask fmImpl) {
        mFmImpl = fmImpl;
    }

    @Override
    public void Replenishment() {
        this.mFmImpl.Replenishment();
    }

    @Override
    public void Moisture() {
        this.mFmImpl.Moisture();
    }

}

2.4 主函数调用
public static void main(String[] args) {
    // 代理面膜老板A
    FacialMask fma = new FacialMaskBossA();
    WeChat wcaa = new WeChat(fma);
    wcaa.Moisture();
    // 代理面膜老板B
    FacialMask fmb = new FacialMaskBossB();
    WeChat wcab = new WeChat(fmb);
    wcab.Moisture();
}
输出结果:
[面膜老板A] 保湿面膜
[面膜老板B] 保湿面膜

你可能感兴趣的:(Android系统应用)