Java设计模式之代理模式

来源:互联网 发布:社交平台源码 编辑:程序博客网 时间:2024/05/21 17:58
   开发android的同学都知道,android的应用框架层用到了大量的代理设计模式,比如基本的AMS、 WMS 等等,总之整个Framework层离不开代理模式的身影。接下来我们学习一下代理模式的基本原理。
1.  代理模式简介

           代理模式是一种为其他对象提供一种代理以控制对这个对象的访问的机制使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。代理类在起到中介作用的同时,也起到了代码解耦合的作用。简单的说有以下三个角色:


Subject:抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义。讲得通俗一点就是,它就是一个入口类,但没有告诉我们具体怎么做。

RealSubject:具体主题类,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。 也就是抽象主题累的实现。 

Proxy:代理主题类,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题类来实现,并且在具体主题角色处理完毕前后做预处理和善后工作。比如用来打印日志,计时等。


2.  代码实现举例说明

          举个例子,老板要出差,这时需要买票,作为老板很多重要的事情,买票这种小事就交给秘书处理,秘书并不能直接买票,秘书可能就在携程网等网站购买。那么这里就回出现三个角色。    老板就是抽象类,定义的行为就是要买票出差, 携程网站就是具体主题类,负责具体的买票行为,秘书就是具体代理类,做一些中间的处理,通过携程来完成具体的买票。


1)    Subject

package com.jackie.designpatterns.proxy;

/**

 * 抽象主题,定义主要功能

 */

/** *  抽象主题,定义主要功能 */publicinterface Subject {   publicvoid buyTicket();}/** *  具体主题  携程 */publicclass RealSubject implements Subject{   @Override   publicvoid buyTicket() {        System.out.println("buy......");   }}/** *  代理类  秘书 */publicclass Proxy implements Subject{    private Subject subject;    public Proxy(Subject subject) {        this.subject = subject;   }    @Override   publicvoid buyTicket() {        System.out.println("准备各种信息......");        subject.buyTicket();        System.out.println("交给老板....");   }}/** *  整体流程 */public class Client {   /**    * @param args    */   publicstaticvoid main(String[] args) {        Subject subject = new RealSubject();        Proxy proxy = new Proxy(subject);        proxy.buyTicket();   }}
当然,还有动态代理类,其实就是利用动态加载类的机制去实现的,从而起到了更加灵活的目的。



0 0
原创粉丝点击