`

设计模式(一)------- 代理模式

 
阅读更多

       许多东西如果概念化,时间久了容易遗忘,所以感觉最好举了例子来。举一反三,能够帮助更好地理解和记忆,甚至于回想。

                                                                                                      ----- 写在前面     

 

       代理模式:

              网上教学,举的例子是坦克(implements Moveable),要记录它的move()时间,等等其他需求。

              举一反三,租房子为例。

                               【 房东(Renter):被代理类; 中介(RenterProxy):代理类】

       目的是将房子租出去(rent())(忽略细节部分,暂且假定houseProxy也有租房子的权利)

       

       Interface: Renter      

 

public interface Renter {
     public void rent();
}

 

 

       Class: HouseOwner

       

public class HouseOwner implements Renter{

	@Override
	public void rent() {
		System.out.println("签订租房合同");
	}

}

 

 

       Class: AgentHandler

       

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class AgentHandler implements InvocationHandler {
	
	private Object target;

	public AgentHandler(Object target) {
		super();
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		showHouse();
		Object result = method.invoke(target, args);
		afterServe();
		return result;
	}
	
	public void showHouse(){
		System.out.println("Show the house to a tenant.");
	}
	
	public void afterServe(){
		System.out.println("If necessary, serve the tenant.");
	}
	
}

   

 

         Class: 测试类

       

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;


public class AgentTest {
	
	public static void main(String[] args) {
		//房东
		Renter renter = new HouseOwner();
		InvocationHandler h = new AgentHandler(renter);
		//中介
		Renter renterProxy = (Renter)Proxy.newProxyInstance(renter.getClass().getClassLoader(),
		      renter.getClass().getInterfaces(), h);
		//租房成功
		renterProxy.rent();	
	}	
}

 

 

    例子到此告一段落。此为动态代理,即利用反射机制动态生成了代理类。后续:Spring的AOP。

 

                                

分享到:
评论

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):提供一个统一的接口,用来访问子系统的一组接口。 - 适配器模式(Adapter):使两个接口不兼容的类能够协同工作。 ...

    设计模式--代理模式

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

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    设计模式不仅仅是一系列具体的解决方案,更是一种思维方式。它们提供了通用的模板,帮助开发者在遇到特定问题时能够快速找到有效的解决方案。设计模式的学习过程通常分为四个阶段:学习、表达、教授、记录。每个阶段...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的核心内容之一。本文旨在深入解析这些设计模式,并通过C++实现来帮助读者更...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):为子系统提供一个统一的接口,使得子系统更容易使用。 - 桥接模式(Bridge):将抽象部分与它的实现部分分离,使...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版

    《设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版》是一份深入探讨软件工程中经典设计模式的重要资料,涵盖了面向对象编程中的核心设计原则和实践。这份资源主要关注GoF(Gang of Four,即《设计模式:可...

    设计模式课件大全

    设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...

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

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

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码

    设计模式作为一种重要的面向对象设计工具,在软件开发中扮演着至关重要的角色。本文旨在深入解析GoF(Gang of Four,四人组)提出的23种设计模式,并提供相应的C++实现示例代码。通过这种方式,读者不仅能理解每种...

    优秀的设计模式示例-静态代理模式

    静态代理模式是设计模式中的一种,属于结构型模式,主要用在我们想要在不修改原有对象的基础上,为对象添加额外功能或者控制对象的行为时。在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码...

    JAVA-设计模式-结构型模式-代理模式

    JAVA-设计模式-结构型模式-代理模式

    Java设计模式-代理模式例子

    Java设计模式是软件开发中的一种重要思想,它总结了在解决特定问题时代码组织和复用的优秀实践。代理模式是这些模式中的一种,它的主要作用是在不改变原有对象行为的前提下,为对象添加额外的功能或者控制访问。在这...

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

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

Global site tag (gtag.js) - Google Analytics