根据我自己的理解 代理模式分两种 一种称为静态的代理,就是本篇所叙述的。静态代理模式是代理模式中最简单容易理解的一种。所谓代理,举个例子,就是比如A想让B办理一件事情,但A不能直接联系B办理,所以A通过一个和B有关系往来的人C来办理。让C联系B办理这件事。
这其中涉及到三个角色:
抽象主题角色: 这里就是所要办的事 这一个动作
真实主题角色: 就是实际办事的人,例子中为B
代理主题角色: 也就是我们常说的中介角色,例子中为C
还是回到这个例子,C让B办理的这个事情,C可以在B办理这个事情前后进行一些操作。 比如C可以送点见面礼给B,然后B心情好了就把事情办了,办完了事情,C还可以宴请一下B。
所以实际在办理A所托付的事情中,C作为中间角色,对整个办事流程进行了一写铺垫和扫尾的操作.
再举例说明,比如租房。我们可以选择自己找房子,也更多是找中介租房。
在这里, 出租这一动作 是一个抽象主题角色,房东是真实主题角色,具体是由房东来出租的。而中介是代理主题角色,是代理房东业主来出租他的房子。 而租户,则是终端用户了。
这样很好理解,代理角色是不会真正也去实现抽象主题的,他只是一个过渡中介,如果过渡中介也真的去实现了抽象主题(接口)的方法,那就不是代理中介了。 我们找中介租房,并不是中介自己有房子给我们租,他只是有业主的租房信息(持有业主的引用而已),否则,他就不是中介代理了,呵呵。
针对租房这个例子,我们抽象三个角色为:
抽象主题角色 Rent(租赁)
真实主题角色 Landlord(房东)
代理主题角色 Agency (中介)
抽象角色Rent 代码:
package com.longewri.proxy.demo01;
/*抽象主题角色 使用接口来进行
*也可以使用抽象类*/
public interface Rent {
//租赁方法
public void rent();
}
真实主题角色(房东) Landlord 代码:
package com.longewri.proxy.demo01;
/*
* Landlord 房东,真实主题角色 实现租赁接口Rent
* */
public class Landlord implements Rent{
public Landlord(){}
public void rent() {
System.out.println("房东将房屋出租,交易成功!");
}
}
代理主题角色(中介)Agency:
package com.longewri.proxy.demo01;
/**
* 代理角色为Agency(中介),其中包含真实角色Landlord(房东)的引用。通过Landlord对象来间接实现接口中的rent方法
*/
public class Agency implements Rent {
private Landlord ld = null;;
//构造方法
public Agency() {
}
// 交付房屋押金
public boolean giveDeposit() {
System.out.println("中介代缴房屋租金和押金.");
return true;
}
// 拿到房屋钥匙
public void getKey() {
System.out.println("中介给你房屋钥匙和租房合同.");
}
// 调用真实角色主题
public void rent() {
if (ld == null)
ld = new Landlord();
if (giveDeposit()) {
ld.rent();
getKey();
}
}
}
终端用户Lessee:
package com.longewri.proxy.demo01;
/*
* 终端用户(租户) 调用实例
* */
public class Lessee {
public static void main (String[] args){
Rent rt=new Agency();
rt.rent();
}
}
执行结果:
中介代缴房屋租金和押金.
房东将房屋出租,交易成功!
中介给你房屋钥匙和租房合同.
从执行结果可以看出,在执行了rent()方法同时,也执行了相关的前置和后置操作。
代码见附件:
分享到:
相关推荐
在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码实例,旨在帮助开发者更好地理解和应用静态代理模式。 静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),...
Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,同时不改变原有对象的代码。在Java中,静态代理是通过在代理类中显式实现目标接口来实现的。下面将详细介绍静态代理模式...
在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在...在实际开发中,应根据项目需求选择合适的代理模式。
静态代理模式是设计模式中的一种,它属于结构型模式,主要用来在不修改原有对象的基础上,通过一个代理对象来增强或扩展原对象的功能。在本篇文章中,我们将深入探讨静态代理模式的概念、工作原理以及其优缺点。 ##...
在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原对象时进行额外的操作,比如日志记录、安全控制、性能统计等。...
代理模式分为两种主要类型:静态代理和动态代理。 **静态代理** 在静态代理中,代理类和目标类都是在编译时就已经确定的。我们首先创建一个目标类接口,然后创建一个实现这个接口的代理类,同时代理类还持有目标类...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
代理模式在Java中主要有两种实现方式:静态代理和动态代理,其中动态代理又分为JDK动态代理和CGlib代理。 1. 静态代理 静态代理是程序员手动创建代理类并实现与目标类相同接口的方式。在静态代理中,代理类和目标类...
代理模式可以进一步细分为静态代理和动态代理。 - **静态代理**:在程序编译时就已经确定代理类的具体实现方式。这意味着每次需要代理不同的操作时,都需要修改代理类的代码,这违反了软件工程中的开闭原则。 - **...
静态代理是代理模式的一种实现方式,它在编译时就已经确定了代理关系。 代理模式的核心在于,它提供了一个代理类,该类实现了与目标类相同的接口,这样客户端就可以通过代理类来间接调用目标类的方法。代理类通常会...
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
Java的代理模式通过代理类提供了对委托类的扩展和控制,静态代理适合对已有代码不做修改的情况,而动态代理则提供了更高的灵活性和扩展性。在实际应用中,应根据项目需求和性能考虑选择静态代理或动态代理。对于需要...
java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
代理模式主要分为静态代理和动态代理两种类型。 1. 静态代理 在静态代理中,代理类和目标类是在编译时就已经确定的,它们通常具有相同的接口。客户端通过代理类调用方法,代理类再转发到目标类。以下是一个简单的...
代理模式分为静态代理和动态代理两种主要形式,每种都有其特定的应用场景和优势。下面我们将深入探讨这两种代理模式,并通过一个“黄牛买票”的例子来具体说明。 首先,我们来看静态代理。静态代理是程序员在编译时...