zoukankan      html  css  js  c++  java
  • java设计模式之代理模式

    代理模式的实现

    一、描述

    代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

    所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。

    二、代理模式类图

    在代理模式中的角色:

    抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。

    目标对象角色:定义了代理对象所代表的目标对象。

    代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。

    三、一个实例

    关系图

    抽象对象角色:

    package com.test.proxy;

    public interface SourceObj {
    public void doSomethings();

    }

    目标对象角色:

    package com.test.proxy;

    public class RealObj implements SourceObj{

    @Override
    public void doSomethings() {
    System.out.println("do somethings");
    }
    }

    代理对象角色:

    package com.test.proxy;

    public class ProxyObj implements SourceObj{

    RealObj realObj = new RealObj();

    @Override
    public void doSomethings() {

    System.out.println("before do somethings");

    realObj.doSomethings();

    System.out.println("end do somethings");

    }

    }

    测试主类:

    package com.test.proxy;

    public class Client {

    public static void main(String[] args) {

    SourceObj sourceObj = new ProxyObj();
    sourceObj.doSomethings();
    }

    }

    执行结果:

    before do somethings
    do somethings
    end do somethings
    1
    2
    3
    从上面的例子可以看出代理对象将客户端的调用委派给目标对象,在调用目标对象的方法之前跟之后都可以执行特定的操作。

    四、代理模式的应用场景

    如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:
    1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
    2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。

    使用代理模式,可以将功能划分的更加清晰,有助于后期维护!
    ---------------------

  • 相关阅读:
    Effective Java 第三版——26. 不要使用原始类型
    Effective Java 第三版——25. 将源文件限制为单个顶级类
    Effective Java 第三版——24. 优先考虑静态成员类
    Effective Java 第三版——23. 优先使用类层次而不是标签类
    Effective Java 第三版——22. 接口仅用来定义类型
    Effective Java 第三版——21. 为后代设计接口
    Effective Java 第三版——20. 接口优于抽象类
    Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
    Effective Java 第三版——18. 组合优于继承
    Effective Java 第三版——17. 最小化可变性
  • 原文地址:https://www.cnblogs.com/spps/p/10092331.html
Copyright © 2011-2022 走看看