设计模式学习笔记(五)之代理模式(Proxy):
1:定义与作用:为其他对象提供一种代理以控制对这个对象的访问。
2:代理模式一般涉及到的角色有以下三个:
- 抽象角色:声明真实对象和代理对象的共同接口;
- 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装;
- 真实角色:代理角色所代表的真实对象,是我们最终要引用的对象;
3:代理模式(Proxy的结构图):
从上面的结构类图可以看出,代理类(Proxy)和真实角色类(RealSubject)都实现了抽象角色类,这样由于
Proxy 和 RealSubject 均实现自 Subject 这个抽象角色类,并且在
Proxy 和 RealSubject 中均实现了 Request 方法,所以在需要使用 RealSubject 的地方便可以使用 Proxy 来替代,由于使用了 Proxy 来替代 RealSubject ,所以便实现了通过 Proxy 来代理 RealSubject
;看还是挺好理解的吧(*^__^*)
4:下面我们使用租房子的一个小例子来模拟代理模式
(在其中:房子的主人为:真实角色RealSubject;中介为:代理角色Proxy;作为要去租房子的我们,我们平时一般见不到房子的主人,此时我们去找中介,让中介直接和找房主交涉,把房子租下来,直接跟租房子打交道的是中介。中介就是在租房子的过程中的代理者),看下结构图:
下面来看代码:
①:抽象角色:Rent.java
package com.jiangqq.proxy1;
//抽象角色,定义真实角色和代理角色的共同接口
public interface Rent {
public void order();
}
②:真实角色类:RentReal.java
package com.jiangqq.proxy1;
//真实角色,去执行确定房子租
public class RentReal implements Rent {
@Override
public void order() {
System.out.println("租房子OK....");
}
}
③:代理角色类:RentProxy.java
package com.jiangqq.proxy1;
//代理角色,在代理角色内部,使用真实角色的应用去执行自己的order()角色,这样租房子
public class RentProxy implements Rent {
//在代理的角色的内部去引用真实的角色
private RentReal realSubject;
@Override
public void order() {
if(realSubject==null)
{
realSubject=new RentReal();
beforeProxy();
//使用真实角色去完成所需要的事情
realSubject.order();
afterProxy();
}
}
//真实角色的操作之前去执行,不是必须要有
private void beforeProxy()
{
System.out.println("beforeProxy...");
}
//真实角色的操作之后去执行,不是必须要有
private void afterProxy()
{
System.out.println("afterProxy...");
}
}
④:客户端测试类代码:
package com.jiangqq.proxy1;
//代理模式的测试客户端
public class Client {
public static void main(String[] args) {
Rent proxySubject=new RentProxy();
proxySubject.order();
}
}
Client执行的结果如下:
看上面的代码,我们可以清楚的看出来,在客户端实际调用的是RentReal(真实角色)的order()方法,现在我们可以使用RentProxy(代理角色)去调用进行处理,当然我们大家都知道,作为中介肯定要赚钱来(话说不赚钱中介凭什么帮你去租房子呢?嘿嘿),所以我们看到在RentProxy.java中还定义了两个私有的方法,当然也可以不定义啦,就可以说此刻的中介的人真好,服务之后不收钱了,免费了一次,如果真这样,那这世界还真美好~~~
5:代理模式在实际情况中的应用(以下是我在《大话设计模式》书中摘录的):
①:远程代理:就是一个对象在不同的地址空间提供局域代表,这样可以掩盖一个对象存在不同地址空间的事实;
②:虚拟代理:就是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象;
③:安全代理:用来控制真实对象访问时的权限;
④:智能代理:是指调用真实的对象时,代理处理另外一些事情;
例子的代码下载链接:http://download.csdn.net/detail/jiangqq781931404/4201822
分享到:
相关推荐
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
代理模式分为静态代理和动态代理,其中动态代理在Java中可以通过InvocationHandler接口和Proxy类实现。 2. **单例模式**: 单例模式确保一个类只有一个实例,并提供全局访问点。这种模式常用于控制资源的共享,如...
C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...
7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 行为型模式涉及对象之间的责任分配,包括: 1. 责任链模式(Chain of Responsibility):将请求沿着处理者链传递,直到有对象处理为止。 2....
这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...
"GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...
这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...
在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...
以下是一些在尚学堂300Java设计模式部分学习笔记中涉及的设计模式的知识点: 创建型模式: 创建型模式主要解决对象创建的问题,确保系统的灵活性和封装创建细节。学习笔记中提到了5种创建型模式: 1. 单例模式...
文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...
在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...
通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式的学习和掌握是成为一名优秀程序员的必经之路,它们能帮助我们写出更高效、更灵活、...
2. 结构型模式:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)。它们处理对象之间的关系,如组合...
结构型模式涉及如何组合类和对象以获得更大的结构,如代理模式(Proxy)、装饰模式(Decorator)和适配器模式(Adapter)。代理模式为其他对象提供一种代理以控制对这个对象的访问;装饰模式可以在不影响其他对象的...
在软件开发领域,设计模式是经过验证的解决常见问题的有效方案。这些模式是经验丰富的开发者在面对特定设计问题时的智慧结晶,它们提供了一种...通过学习和应用这些设计模式,开发者可以提升自己的编程技巧和设计能力。
本资料“图解Java设计模式笔记总结word版本”聚焦于通过图文并茂的方式,深入浅出地解析各种设计模式。以下是基于这个主题的详细知识点讲解: 1. **设计模式的分类** - **创建型模式**:如单例(Singleton)、工厂...