代理模式 (Proxy)

举例说明:

/**
 * 作者:wanglei 
 * 邮箱:[email protected]
 * 代理模式
 * 创建抽象对象接口(Subject):声明你(真实对象)需要让代购(代理对象)帮忙做的事(买Mac)
 */
public interface Subject {

    public void buyMac();
}
/**
 * 作者:wanglei 
 * 邮箱:[email protected]
 * 代理模式
 * 创建代理对象类(Proxy),即”代购“,并通过代理类创建真实对象实例并访问其方法
 */
public class Proxy implements Subject{
    @Override
    public void buyMac() {
        //引用并创建真实对象实例,即”我“
        RealSubject realSubject = new RealSubject();
        //调用真实对象的方法,进行代理购买Mac
        realSubject.buyMac();
        //代理对象额外做的操作
        this.WrapMac();

    }

    private void WrapMac(){
        System.out.println("用盒子包装好Mac");
    }
}
/**
 * 作者:wanglei 
 * 邮箱:[email protected]
 * 代理模式
 * 创建真实对象类(RealSubject),即”我“
 */
public class RealSubject implements Subject{
    @Override
    public void buyMac() {
        System.out.println("buy Mac ......");
    }
}
/**
 * 作者:wanglei 
 * 邮箱:[email protected]
 * 代理模式
 * 定义:
 * 1.给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用
 * 2.代理对象:起到中介作用,连接客户端和目标对象
 * 3.例子:电脑桌面的快捷方式。电脑对某个程序提供一个快捷方式(代理对象),快捷方式连接客户端和程序,客户端通过操作快捷方式就可以操作那个程序
 * 主要作用:
 * 通过引入代理对象的方式来间接访问目标对象
 * 解决的问题:
 * 防止直接访问目标对象给系统带来的不必要复杂性。
 * 实例讲解:
 * 实例概况
 * 背景:小成希望买一台最新的顶配Mac电脑
 * 冲突:国内还没上,只有美国才有
 * 解决方案:寻找代购进行购买
 * 代购(代理对象) 代替 我(真实对象) 去买Mac(间接访问的操作)
 */
public class SimplePattern {

    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.buyMac();
    }
}

/**
 * 结果:
 * buy Mac ......
 * 用盒子包装好Mac
 * 优点:
 * 1.协调调用者和被调用者,降低了系统的耦合度
 * 2.代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用
 * 缺点:
 * 1.由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢;
 * 2.实现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度。
 * 应用场景:
 * 1.当需要为一个对象再不同的地址空间提供局部的代表时此时的代理模式称为远程代理:为一个对象在不同的地址空间提供局部代表。
 *          目的:
 *          1.隐藏一个对象存在于不同地址空间的事实;
 *          2.远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
 * 2.当需要创建开销非常大的对象时此时的代理模式称为虚拟代理:通过使用过一个小的对象代理一个大对象。
 *          目的:
 *          1.减少系统的开销。
 * 3.当需要控制对原始对象的访问时此时的代理模式称为保护代理:控制目标对象的访问,给不同用户提供不同的访问权限
 *          目的:
 *          1.用来控制对真实对象的访问权限
 * 4.当需要在访问对象时附加额外操作时此时的代理模式称为智能引用代理,额外操作包括耗时操作、计算访问次数等等
 *          目的:
 *          1.在不影响对象类的情况下,在访问对象时进行更多的操作
 * 5.防火墙代理:保护目标不让恶意用户靠近
 * 6.Cache代理:为结果提供临时的存储空间,以便其他客户端调用
 */

你可能感兴趣的:(代理模式 (Proxy))