Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

设计模式——代理模式

$
0
0

代理对于我们来说再熟悉不过了,比如:代理商,代理律师。那么代理的到底是什么含义呢?代理就是受委托代表当事人进行某种活动。那么代理模式的核心作用是什么呢?就是通过代理,控制对象的访问。可以详细的控制访问某个或者是某类对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。
代理是在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用代理模式。
下面是一些可以使用代理 模式常见情况:
1.远程代理为一个对象在不同的地址空间提供局部代表。
2.虚代理根据需要创建开销很大的对象,使得此对象只在需要时才会真正创建。
3.保护代理控制对原始对象的访问。
4.智能指引取代了简单的指针,它在访问对象时执行一些附加操作。
5.防火墙代理,保护目标,不让恶意用户接近。
代理又分为静态代理(静态定义代理类)和动态代理(动态生成代理类)两种。
动态代理相比较静态代理而言在抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的方法中处理,这样的好处就是我们可以更加灵活和统一的处理众多的方法。
举个例子:假如说我在北京工作,接了一个上海的项目,但是由于太远我又不想去上海,怎么办呢?此时刚好我一个同学在上海上班,于是我就跟我的同学联系,让他帮我把这个项目谈过来。接项目肯定需要 面谈—>起草合同—>收首款—>做项目—>收尾款。除了完成项目的过程是由我本人执行之外,其他的都是由我同学来处理的,那么我同学所起的作用就是代理。
静态代理模式为
接项目过程

public interface Project {
    String interview();
    String drafContract();
    String receiveFirst();
    String doProjects ();
    String endParagraph();
}

本人自己

public class Mine implements Project {
    @Override
    public String interview() {
        return "Mine--->interview";
    }

    @Override
    public String drafContract() {
        return "Mine--->drafContract";
    }

    @Override
    public String receiveFirst() {
        return "Mine--->receiveFirst";
    }

    @Override
    public String doProjects() {
        return "Mine--->doProjects";
    }

    @Override
    public String endParagraph() {
        return "Mine--->endParagraph";
    }
}

同学代理

public class ProxySchoolmate  implements Project{
    private Project mine;

    public ProxySchoolmate(Mine mine) {
        this.mine = mine;
    }

    @Override
    public String interview() {
        return "ProxySchoolmate--->interview";
    }

    @Override
    public String drafContract() {
        return "ProxySchoolmate--->drafContract";
    }

    @Override
    public String receiveFirst() {
        return "ProxySchoolmate--->receiveFirst";
    }

    @Override
    public String doProjects() {
        return  mine.doProjects();
    }

    @Override
    public String endParagraph() {
        return "ProxySchoolmate--->endParagraph";
    }
}

测试

  Mine mine = new Mine();
  ProxySchoolmate proxySchoolmate = new ProxySchoolmate(mine);
  System.out.println(proxySchoolmate.interview());
  System.out.println(proxySchoolmate.drafContract());
  System.out.println(proxySchoolmate.receiveFirst());
  System.out.println(proxySchoolmate.doProjects());
  System.out.println(proxySchoolmate.interview());
  System.out.println(proxySchoolmate.endParagraph());

运行效果
这里写图片描述

作者:u014452224 发表于2017/2/21 18:48:15 原文链接
阅读:110 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>