`

常用设计模式----代理模式

 
阅读更多
package org.design.patterns;

/**
 *代理模式:
 *为另一个对象提供一个替身或占位符以控制对这个对象的访问。
 *
 * 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,
 * 被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。
 */

//==============================下面是一个动态代理的例子==========

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.Level;
import java.util.logging.Logger;

 

class LogHandler implements InvocationHandler {
 Logger logger = Logger.getLogger(this.getClass().getName());

 private IHello target;

 public Object bind(IHello target) {
  this.target = target;
  return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
 }

 @Override
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  Object retValue = null;
  logger.log(Level.INFO, "Method start ...");

  retValue = method.invoke(target, args);

  logger.log(Level.INFO, "Method end ...");

  return retValue;
 }
}

interface IHello{
 public void hello();
 public void lloo();
}

class SayHello implements IHello{

 public void hello() {
  System.err.println("Hello hello ,how are you?");
 }

 public void lloo() {
  System.err.println("What a fucking day!");
 }
}

public class DynamicProxyTest {
 public static void main(String[] args) {
  LogHandler logHand = new LogHandler();//InvocationHandler的子类,实现了代理操作
  Object sayHello = logHand.bind(new SayHello());//获得一个SayHello的代理对象sayHello
  
  boolean b=Proxy.isProxyClass(sayHello.getClass());
  System.err.println(b);
  
//  if (sayHello instanceof IHello) {
//   ((IHello) sayHello).hello();
//  }

 }

}

//=====================================================

/*
 * 相关模式比较:
 * 
 * 装饰者: 包装一个对象,并提供额外的行为(强调:装饰)
 * 
 * 外观:      包装许多对象以简化它们的接口     (强调:简化)
 * 
 * 代理:      包装一个对象,并控制对它的访问(强调:代理)
 * 
 * 适配器: 包装一个对象,并提供不同的接口 (强调:转换)
 * 
 */
分享到:
评论

相关推荐

    java常用设计模式-代理模式

    代理模式(Proxy Pattern)是一种常用的设计模式,提供了间接访问目标对象的一种方式,即通过代理对象访问目标对象。这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加额外的扩展功能。 代理模式...

    设计模式--代理模式

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,允许我们通过一个代理类来控制对原对象的访问。在《设计模式:可复用面向对象软件的基础》(通常称为GoF设计模式)中,代理模式被定义为“为其他对象...

    设计模式-代理模式

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要的角色,特别是在iOS平台的应用程序设计中。代理模式的核心思想是为一个对象提供一个替身或代理,以控制对这个对象的访问。这种模式允许我们通过代理来间接...

    JAVA常用设计模式-追美眉技术详解.doc

    ### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...

    设计模式-代理模式-java

    代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们为其他对象提供一种代理以控制对这个对象的访问。在Java中,代理模式可以通过多种方式实现,包括静态代理、动态代理(JDK动态代理...

    设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,主要用来为其他对象提供一种代理以控制对这个对象的访问。在这个专题中,我们将深入探讨代理模式,并通过Python和C++两种语言来实现示例代码。 首先...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...

    JAVA设计模式例程-代理模式

    代理模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许我们为一个对象提供一个替代品或代表,以便在不改变原有对象的基础上增加额外的功能或控制访问。在这个"JAVA设计模式例程-代理模式"的压缩包中...

    设计模式----Java

    **定义:** 工厂模式是一种常用的创建型设计模式,它提供了创建对象的统一接口,而将实例创建的细节隐藏起来。这种模式允许在不指定具体类的情况下创建对象。 **优点:** 提高系统的可扩展性和灵活性,当需要增加新...

    常用设计模式及Java程序 pdf

    ### 常用设计模式及Java程序设计 #### 设计模式概述 设计模式是一种软件设计领域中的通用解决方案,用于描述解决常见设计问题的最佳实践。它不仅有助于提高代码的复用性和可读性,还能增强软件架构的灵活性和扩展...

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    Java常用设计模式

    以下是关于标题和描述中提到的Java常用设计模式的详细解释: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过私有构造器和静态工厂方法实现。双检锁(Double-Check Locking)...

    .NET 23种常用设计模式

    ### .NET 23种常用设计模式 #### 概述 设计模式是在软件工程领域内被广泛采用的一种软件设计思路,旨在解决特定类型的问题。在.NET框架中,这些设计模式同样适用并能帮助开发者构建更加灵活、可扩展及易于维护的...

    23常用设计模式的UML

    这个压缩包文件"23常用设计模式的UML"提供了23个经典设计模式的统一建模语言(UML)表示,这对于理解和应用这些模式至关重要。 首先,我们要了解UML是一种标准化的图形表示法,用于系统分析、设计和建模。它通过...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    8. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,静态代理和动态代理(JDK Proxy)可以实现这一模式。 9. **桥接模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。在...

    java中常用设计模式总结心得

    以下是对Java中常用设计模式的详细解释: 1. **单例模式**:单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于配置管理、线程池或者数据库连接池等场景。实现方式有懒汉式(线程不安全)、...

    C++设计模式-GOF23种设计模式,非常不错的

    - **定义**: Factory模式是一种常用的创建型设计模式,它提供了创建对象的接口,但允许子类决定实例化哪一个类。该模式的核心在于将实例化逻辑封装起来,以便在不修改客户端代码的情况下更改或扩展产品类。 - **优点...

    JAVA常用设计模式.ppt

    以及代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 设计模式的应用不仅限于上述几种,还包括适配器模式、装饰器模式、观察者模式、责任链模式、命令模式、迭代器模式、访问者模式、模板方法...

    九种常用设计模式的应用!

    这篇博客“九种常用设计模式的应用!”探讨了九种常见的设计模式,并结合实际开发场景阐述了它们的应用。以下是对这些设计模式的详细介绍: 1. **单例模式**(Singleton):保证一个类只有一个实例,并提供一个全局...

Global site tag (gtag.js) - Google Analytics