美文网首页
设计模式之静态代理模式

设计模式之静态代理模式

作者: Leon_hy | 来源:发表于2017-04-06 22:23 被阅读16次

静态代理模式定义

为其他对象对象提供一种代理以控制对这个对象的访问。

代理模式UML.png
  • Subject:定义了RealSubject和Proxy的公用接口,这样在任何使用RealSubject的地方都可以使用Proxy。
  • RealSubject:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
  • Proxy:实现抽象角色Subject,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

代理模式具体实现

背景:

周杰伦商演,需要面谈、合同起草、签字、收预付款、安排车辆和机票、唱歌、收尾款。周杰伦只负责唱歌即可,如果很多商演干这么多活岂不是要累死。这里就可以想到周杰伦有经纪人,经纪人负责安排周杰伦唱歌并处理好其他收款等事情,周杰伦只要安安静静的唱歌就可以啦!

经纪人(代理对象)安排 周杰伦(真实对象) 唱歌(间接访问的操作)。

抽象对象Subject
 public interface Subject {
    /**
     * 面谈
     */
    public void confer();
    /**
     * 签合同
     */
    public  void signContact();
    /**
     * 订机票
     */
    public void bookTicket();
    /**
     * 唱歌
     */
    public void sing();
    /**
     * 收尾款
     */
    public void collectMoney();
}
具体对象RealSubject
public class RealSubject implements Subject{

    @Override
    public void confer() {
        System.out.println("RealSubject confer()");     
    }

    @Override
    public void signContact() {
        System.out.println("RealSubject signContact()");
    }

    @Override
    public void bookTicket() {
        System.out.println("RealSubject bookTicket()");
    }

    @Override
    public void sing() {
        System.out.println("周杰伦 唱歌(sing())");
    }

    @Override
    public void collectMoney() {
        System.out.println("RealSubject collectMoney()");
    }

}
代理对象proxy
public class Proxy implements Subject{

    Subject MySubject;
    public Proxy(Subject subject) {
        MySubject = subject;
    }
    @Override
    public void confer() {
        System.out.println("Proxy confer()");       
    }

    @Override
    public void signContact() {
        System.out.println("Proxy signContact()");
    }

    @Override
    public void bookTicket() {
        System.out.println("Proxy bookTicket()");
    }

    @Override
    public void sing() { 
        MySubject.sing();
    }

    @Override
    public void collectMoney() {
        System.out.println("Proxy collectMoney()");
    }
}
Test
public class Client {

    public static void main(String[] args) {
        RealSubject subject= new RealSubject();
        Proxy proxy = new Proxy(subject);
        proxy.confer();
        proxy.bookTicket();
        proxy.sing();
        proxy.collectMoney();
    }

}
结果
Proxy confer()
Proxy bookTicket()
周杰伦 唱歌(sing())
Proxy collectMoney()

代理模式的优缺点

优点
  • 协调调用者和被调用者,降低了系统的耦合度
  • 代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用。
缺点
  • 由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢;
  • 实现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度。http://blog.csdn.net/fengyuzhengfan/article/details/49586277

相关文章

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • java设计模式之代理模式(静态代理)

      今天给大家分享的是java设计模式之代理模式中的静态代理模式,动态代理模式将在后面文章中给出。如有不足,敬请指...

  • javaweb入门学习之代理模式(03)

    设计模式之代理模式 一. 概述 1.1 静态代理的实现 创建 接口类 IUserDao.java 目标对象类Use...

  • 设计模式之代理

    设计模式之代理模式 一、定义 在Java中代理的实现一般分为三种:JDK静态代理、JDK动态代理以及CGLIB动态...

  • JDK和Cglib动态代理

    1.代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中...

  • 设计模式之-代理模式-静态代理

    1.介绍 1.1 定义 给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用 代理对象:起到中介作用,连接...

  • 动态代理

    先说静态代理,静态代理就是设计模式中的代理模式,形式上与装饰模式一致,但是涵义不同,装饰模式注重新加的修饰功能,代...

  • 理解代理模式

    原创博客地址 简介 代理模式,也叫做委托模式,分为:静态代理动态代理 代理模式也是平时比较常用的设计模式之一,代理...

  • 说说Java代理模式

    在平时写代码时,经常会用到各种设计模式,其中一种就是代理模式,代理实现可以分为静态代理和动态代理。 静态代理 静态...

  • 设计模式之静态代理模式

    静态代理模式定义 为其他对象对象提供一种代理以控制对这个对象的访问。 Subject:定义了RealSubject...

网友评论

      本文标题:设计模式之静态代理模式

      本文链接:https://www.haomeiwen.com/subject/vlfcattx.html