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();
// }
}
}
//=====================================================
/*
* 相关模式比较:
*
* 装饰者: 包装一个对象,并提供额外的行为(强调:装饰)
*
* 外观: 包装许多对象以简化它们的接口 (强调:简化)
*
* 代理: 包装一个对象,并控制对它的访问(强调:代理)
*
* 适配器: 包装一个对象,并提供不同的接口 (强调:转换)
*
*/
分享到:
相关推荐
代理模式(Proxy Pattern)是一种常用的设计模式,提供了间接访问目标对象的一种方式,即通过代理对象访问目标对象。这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加额外的扩展功能。 代理模式...
代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,允许我们通过一个代理类来控制对原对象的访问。在《设计模式:可复用面向对象软件的基础》(通常称为GoF设计模式)中,代理模式被定义为“为其他对象...
代理模式是一种常用的设计模式,它在软件开发中扮演着重要的角色,特别是在iOS平台的应用程序设计中。代理模式的核心思想是为一个对象提供一个替身或代理,以控制对这个对象的访问。这种模式允许我们通过代理来间接...
5. 文件中提到的24种设计模式,涵盖了大多数常用的模式。例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、...
### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...
代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们为其他对象提供一种代理以控制对这个对象的访问。在Java中,代理模式可以通过多种方式实现,包括静态代理、动态代理(JDK动态代理...
代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,主要用来为其他对象提供一种代理以控制对这个对象的访问。在这个专题中,我们将深入探讨代理模式,并通过Python和C++两种语言来实现示例代码。 首先...
本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...
代理模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许我们为一个对象提供一个替代品或代表,以便在不改变原有对象的基础上增加额外的功能或控制访问。在这个"JAVA设计模式例程-代理模式"的压缩包中...
**定义:** 工厂模式是一种常用的创建型设计模式,它提供了创建对象的统一接口,而将实例创建的细节隐藏起来。这种模式允许在不指定具体类的情况下创建对象。 **优点:** 提高系统的可扩展性和灵活性,当需要增加新...
python 项目里常用的设计模式 单例模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式简单工厂 建造者模式 模板模式 桥接多维度 桥接模式 适配器模式 外观模式 享元模式 责任链组合模式
### 常用设计模式及Java程序设计 #### 设计模式概述 设计模式是一种软件设计领域中的通用解决方案,用于描述解决常见设计问题的最佳实践。它不仅有助于提高代码的复用性和可读性,还能增强软件架构的灵活性和扩展...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
### .NET 23种常用设计模式 #### 概述 设计模式是在软件工程领域内被广泛采用的一种软件设计思路,旨在解决特定类型的问题。在.NET框架中,这些设计模式同样适用并能帮助开发者构建更加灵活、可扩展及易于维护的...
以下是关于标题和描述中提到的Java常用设计模式的详细解释: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过私有构造器和静态工厂方法实现。双检锁(Double-Check Locking)...
- **定义**: Factory模式是一种常用的创建型设计模式,它提供了创建对象的接口,但允许子类决定实例化哪一个类。该模式的核心在于将实例化逻辑封装起来,以便在不修改客户端代码的情况下更改或扩展产品类。 - **优点...
这个压缩包文件"23常用设计模式的UML"提供了23个经典设计模式的统一建模语言(UML)表示,这对于理解和应用这些模式至关重要。 首先,我们要了解UML是一种标准化的图形表示法,用于系统分析、设计和建模。它通过...
8. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,静态代理和动态代理(JDK Proxy)可以实现这一模式。 9. **桥接模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。在...
以下是对Java中常用设计模式的详细解释: 1. **单例模式**:单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于配置管理、线程池或者数据库连接池等场景。实现方式有懒汉式(线程不安全)、...
以及代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 设计模式的应用不仅限于上述几种,还包括适配器模式、装饰器模式、观察者模式、责任链模式、命令模式、迭代器模式、访问者模式、模板方法...