`

JAVA设计模式---代理模式(静态)

阅读更多

代理模式是由GoF提出的23种软件设计模式的一种。其定义为:为其他对象提供一种代理以控制对这个对象的访问。别名:Surrogate。
所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。Proxy模式是很常见的模式,在我们生活中处处可见,例如我们买火车票不一定非要到火车站去买,可以到一些火车票的代售点去买。寄信不一定是自己去寄,可以把信委托给邮局,由邮局把信送到目的地。

代理结构如下图所示

Java 代理/动态代理模式(Proxy) - stevinzhu - stevinzhu的博客

以通过代售点买火车票为例,代码实现如下:

//提供买票的公共接口
interface Passenger {
public void buyTicket();
}

//乘客实体
public class RealPassenger implements Passenger {
@Override
public void buyTicket() {
   // TODO Auto-generated method stub
   System.out.print("购买了火车票");
}
}

//代售点
public class Proxy implements Passenger {
Passenger passenger;

public Proxy(Passenger p) {
   this.passenger = p;
}

@Override
public void buyTicket() {
   // TODO Auto-generated method stub
   System.out.println("通过代售点");
   passenger.buyTicket();
}
}

//测试类
public class Client {
public static void main(String[] args) {
   Passenger passenger = new RealPassenger();
   Passenger proxy = new Proxy(passenger);
   proxy.buyTicket();
}
}

输出结果:
通过代售点
购买了火车票

以上的也可叫做静态代理,是为了区别代理模式在Java中的另一种实现——动态代理。动态代理的应用十分广泛,在struts2的拦截器中就用到了动态代理机制。还是以买车票为例子,现在用动态代理来实现,其中不懂的接口方法查查Java api就会明白了,在此不多做解释,代码如下(注意PassengerProxy类):

import java.lang.reflect.*;

public interface Passenger {
public void buyTicket();
}

public class RealPassenger implements Passenger {

@Override
public void buyTicket() {
   // TODO Auto-generated method stub
   System.out.println("购买了车票");
}
}

// 用动态代理实现
public class PassengerProxy implements InvocationHandler {
public Object obj;

// 把obj交给代理类
public Object obj(Object obj) {
   this.obj = obj;
   return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
     .getClass().getInterfaces(), this);
}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
   // TODO Auto-generated method stub
   System.out.println("通过代理");
   method.invoke(obj, args);
   return null;
}
}

public class Client {
public static void main(String[] args) {
   PassengerProxy proxy = new PassengerProxy();
   Passenger passenger = (Passenger) proxy.obj(new RealPassenger());
   passenger.buyTicket();
}
}

分享到:
评论

相关推荐

    Java设计模式——代理设计模式(静态代理和动态代理)

    Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码

    java 设计模式 静态代理模式

    //代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...

    java静态代理、动态代理、装饰设计模式

    NULL 博文链接:https://871656094.iteye.com/blog/2355335

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    java 代理模式实现代码及设计详解:动态代理模式、静态代理模式

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...

    Java设计模式之代理模式

    Java设计模式之代理模式 1.代理模式 1.1 静态代理 1.2 动态代理 1.3.代理模式使用原因和应用方面

    Java 动态代理.md

    代理模式(Proxy Pattern)是 23 种设计模式的一种,属于结构型模式。他指的是一个对象本身不做实际的操作,而是通过其他对象来得到自己想要的结果。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,...

    代理模式_静态代理.zip

    设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用

    java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar

    java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法...

    java静态代理和动态代理详解

    Java中的代理是一种常见的设计模式,它可以帮助我们在不改变原有代码逻辑的情况下,对现有对象进行增强或扩展。在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定...

    Java设计模式:静态代理、装饰者、动态代理详解

    静态代理、装饰者、动态代理1. 静态代理设计模式1.1 ...代理模式是Java常见的设计模式之一。 代理模式是指不直接调用实际对象,而是通过调用代理,来间接的调用实际的对象。 为什么要采用这种间接的形式来调用对象呢?

    java设计模式

    1.工厂模式 a.简单工厂(静态工厂):一个工厂类根据传入的参数来决定创建哪一类产品的实例,它的核心是工厂类,由于 工厂类中的创建方法是静态的(static)所以简单工厂...3.代理模式:包装对象,以控制对此对象的访问

    稳稳当当学java之设计模式(12).md

    本人的笔记,关于java基础中设计模式的内容 包括 1.作业回顾 2.内部类 2.1局部内部类 2.2静态内部类 2.3匿名内部类 3.设计模式 3.1单例模式 3.2代理模式 3.3观察者模式 3.4模板模式 4.练习

    设计模式之代理模式Java实现和类设计图

    设计模式之代理模式Java实现和类设计图,包括静态代理和动态代理

    java静态代理与动态代理

     代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个...

    java动态代理实现与原理详细分析.docx

     代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理...

    java代理service和自定义注解

    java静态代理设计模式,学习记录,简单自定义注解编写

    Java+单例+多例+工厂+枚举+动态代理===》演示

    单例设计模式案例演示 单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,**应用该模式的这个类只有一个实例**。即一个类只有一个对象实例。 #### 单例设计模式实现步骤 1. 将构造方法私有化,使其...

    java设计模式选择题复习题.doc

    行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器...

    静态代理和动态代理Demo

    资源列举了设计模式中的静态代理和动态代理的简单java实现,jdk1.8版本经过测试验证,对于想学习设计模式的童靴应该有所帮助

Global site tag (gtag.js) - Google Analytics