亲宝软件园·资讯

展开

Java设计模式中代理模式应用详解

lpf_wei 人气:1

编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观。

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。找女朋友、找保姆、找工作等都可以通过找中介完成。

在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。

1.代理设计模式定义

代理模式:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

2.代理设计模式的优点与不足

代理模式的主要优点有:

其主要缺点是:

也可以考虑使用动态代理

3.代理设计模式的实现思路

代理模式的结构比较简单,主要是通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问,下面来分析其基本结构和实现方法。

代理模式的主要角色如下:

4.代理设计模式代码示例

示例场景介绍:在拍摄预览的时候,可以渲染各种特效,比如:磨皮,美白,滤镜等,但是假如不能直接渲染美妆特效,那么美妆特效就可以使用代理的方式添加。

public interface IEffect {
    String renderEffect();

}
public class EffectImpl implements IEffect {
    @Override
    public String renderEffect() {
        System.out.println("渲染美白特效成功");
        return "美白";
    }
}
public class MakeUpEffectImpl implements IEffect {
    @Override
    public String renderEffect() {
        System.out.println("渲染美妆成功");
        return "美妆";
    }
}
public class ProxyOrder  implements IEffect {
    /**
     * 代理类持有被代理的对象 ,进行操作的时候,执行的是持有的代理类的相应逻辑
     */
    private IEffect orderService = new MakeUpEffectImpl();
    @Override
    public String renderEffect() {
        System.out.println("开始渲染美妆");
        orderService.renderEffect();
        System.out.println("渲染美妆结束");
        return "增加了美妆特效";
    }
}
 public static void main(String[] args) {
        IEffect orderService = new ProxyOrder();
        orderService.renderEffect();
 }

通过代理类,进行了美妆的渲染操作,并且进行打印,可以认为对功能进行了增强。

5.代理设计模式的应用场景

当无法或不想直接引用某个对象或访问某个对象存在困难时,可以通过代理对象来间接访问。使用代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。

加载全部内容

相关教程
猜你喜欢
用户评论