java代码实现设计模式之代理模式

/* 代理模式
*
* 生活中:
* (1)自己不方便做一些事情,例如:去国外 找代购 租房 买房 等等...
* 1、代理模式
* (1)主题接口:要求代理类与被代理类实现同一个接口,例如:DAO接口
* (2)被代理者
* (3)代理者
* 必须持有被代理者的引用
*
* 2、静态代理模式
* 缺点:一个代理类只能替一个代理主题(接口)代理工作
*
* 3、动态代理模式
* 优点:一个代理工作处理器,可以替多个代理主题代理工作,只有代理工作内容一样就可以。
* 需要:
* (1)编写一个代理工作处理器的类,这个类必须实现一个接口InvocationHandler
* (2)用JDK中提供了一个Proxy类,来创建代理类的对象
* (3)调用方法

示例: 静态代理

interface A{
  void run();
}

class B implements A{
  @Override
  public void run() {
    for (int i = 0; i < 1000; i++) {
      System.out.println(i);
    }
  }
}

class StaticProxy implements A{
  private A a;
  public StaticProxy(A a) {
    this.a = a;
  }

  @Override
  public void run() {
    System.out.println("run方法执行");
    long start = System.currentTimeMillis();
    a.run();
    long end = System.currentTimeMillis();
    System.out.println("执行时间:" + (end - start));
    System.out.println("run方法执行结束");
  }
}

静态代理的使用:new StaticProxy(new B()).run()

示例:动态代理

interface C {
  void run();
}

class CImpl implements C{
  @Override
  public void run() {
    System.out.println("C接口的run方法执行中");
  }
}

class DynamicProxy implements InvocationHandler {

  //被代理的对象
  private Object obj;
  public DynamicProxy(Object obj){
    this.obj = obj;
  }

  

  /*
  * 参数一:代理类的对象
  * 参数二:被代理者要执行的方法
  * 参数三:被代理者要执行的方法需要的实参列表
  * 这个方法不是程序调用的,是一会执行代理类对象的方法时自动调用
  */

  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println(method.getName() + "方法执行");
    long start = System.currentTimeMillis();
    Object object = method.invoke(obj, args);
    long end = System.currentTimeMillis();
    System.out.println("执行时间:" + (end - start));
    System.out.println(method.getName() + "方法执行结束");
    return object ;
  }
}

动态代理使用:

public class TestProxy2 {
  public static void main(String[] args) {
    Class clazz = CImpl.class;
    ClassLoader loader = clazz.getClassLoader();
    Class[] interfaces = clazz.getInterfaces();
    C proxy = (C) Proxy.newProxyInstance(loader, interfaces, new DynamicProxy(clazz));
    proxy.run();

  }

}

原文地址:https://www.cnblogs.com/dirsoen/p/12642747.html

时间: 2024-08-30 17:43:24

java代码实现设计模式之代理模式的相关文章

Java学习笔记——设计模式之四.代理模式

To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: 1 package cn.no4.proxy; 2 3 public interface IMakeMoney { 4 5 void makeMoney(); 6 } 1 package cn.no4.proxy; 2 3 public class Proxy implements IMakeMoney { 4

java学习笔记-设计模式9(代理模式)

意图 为其他对象提供一种代理以控制对这个对象的访问. public interface Sourceable { public void method(); } public class Source implements Sourceable{ @Override public void method() { System.out.println("this is original method!"); } } public class Proxy implements Source

Java代码实现设计模式之工厂模式

工厂设计模式:为了解耦合,把对象的创建者与对象的使用者分开. 生活中:批量生产产品 Java中:批量生产对象 分工: 把生产(创建)对象与使用对象分开了,解耦合 1.简单工厂模式 优点:代码比较简洁 缺点:如果增加新的产品类型,需要修改工厂类 违反了面向对象的一个开发原则:对扩展开放,对修改关闭 2.工厂方法模式 (1)为了生产对象与使用对象分开 (2)如果增加新产品,就不需要修改原来的工厂类 优点:遵循了增加新产品,不修改原来的类的原则, 缺点:类太多了 示例:简单工厂模式 class Sim

JAVA设计模式之代理模式

学编程吧JAVA设计模式之代理模式发布了,欢迎通过xuebiancheng8.com来访问 一.概述 给某一个对象提供一个代理,并由代理对象来完成对原对象的访问.代理模式是一种对象结构型模式. 二.适用场景 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口. 三.UML类图 四.参与者 1.接口类:Subject 它声明了真实访问者和代理访问者的共同接口,客户端通常需要针对接口角色进行编程. 2.代理类

java设计模式6——代理模式

java设计模式6--代理模式 1.代理模式介绍: 1.1.为什么要学习代理模式?因为这就是Spring Aop的底层!(SpringAop 和 SpringMvc) 1.2.代理模式的分类: 静态代理 动态代理 1.3.代理模式关系图(以租房子为例) 2.静态代理 2.1.角色分析: 抽象角色:一般会使用接口或者抽象类来解决 真实角色:被代理的角色 代理客户:代理真实角色.代理真实角色后,我们一般会做一些附属的操作 客户:访问代理对象的人 2.2.例1(租房子演示) 2.2.1.抽象角色实现(

JAVA设计模式(3)----代理模式

1.  什么是代理模式?Proxy Pattern 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 通俗的讲,代理模式就是我很忙没空理你,你要想找我可以先找我的代理人,代理人和被代理人继承同一个接口.代理人虽然不能干活,但是被代理的人可以干活. 这个例子中有水浒传中的这么几个人:名垂青史的潘金莲,王婆,西门大官人.西门庆想要找潘金莲,需要找王婆做代理.首先定义一个接口:Kin

Android设计模式之代理模式 Proxy

一.概述 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日常生活中代理模式的应用.平时打开网页,最先开到的一般都是文字,而图片等一些大的资源都会延迟加载,这里也是使用了代理模式. 代理模式的组成: Abstract Subject:抽象主题-声明真实主题和代理主题共同的接口

设计模式之代理模式20170724

结构型设计模式之代理模式: 一.含义 代理模式也叫做委托模式,其定义如下: 为其他对象提供一种代理以控制对这个对象的访问. 二.代码说明 1.主要有两个角色 1)具体主题角色 也叫做委托角色.被代理角色.它是业务逻辑的具体执行者. 2)代理主题角色 也叫做委托类.代理类.它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作. 一个代理类可以代理多个被委托者或被代理者. 2.在用C实现过程中也是参考这种思想,以游戏代理场

设计模式之代理模式 (三)

代理模式也叫委托模式. 一.定义: 代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象.这些额外的操作通常需要与实际对象进行通信. 二.角色定义 抽象角色:声明真实对象和代理对象的共同接口: 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象