一.概念
代理模式:为对象提供一种代理,以控制这个对象的访问。
二.UML
- Subject:定义RealSubject和Proxy的共同接口,这样在任何使用RealSubject的地方都可以使用Proxy。
- RealSubject:定义Proxy所代表的实体。
- Proxy:代理类,保存一个实体对象的引用,代理委托实体做事。
三.实例分析
在深圳这个神奇的国度里,最有钱的其实是那些房东。这还得感谢我们伟大的小 平同志。以前不值钱的房子,现在租客多了,原地随便盖个十几层,一年下来百来万是一点问题都没有的。房东是基本不出现的,整个租房,收钱都是别人在帮他搞,也就是我们说的房屋中介。
Renter
package com.zzy.proxy;
/**
* 租客接口
* @author eason
*
*/
public interface Renter {
//租房
void rent();
//收房租
void getMoney();
}
HouseOwner
package com.zzy.proxy;
/**
* 房主
* 真实对象
* 被代理对象
* @author eason
*
*/
public class HouseOwner implements Renter{
@Override
public void getMoney() {
System.out.println("收取房租100W");
}
@Override
public void rent() {
System.out.println("出租房屋一年");
}
}
Agency
package com.zzy.proxy;
/**
* 房屋中介
* 代理对象
* @author eason
*
*/
public class Agency implements Renter{
private HouseOwner houseOwner;
//客户端不需要HouseOwner实例
//客户因为Agency就是HouseOwner
public Agency() {
this.houseOwner = new HouseOwner();
}
@Override
public void getMoney() {
houseOwner.getMoney();
}
@Override
public void rent() {
houseOwner.rent();
}
}
ProxyTest
package com.zzy.proxy;
/**
* 测试类
* @author eason
*
*/
public class ProxyTest {
public static void main(String[] args) {
Agency agency = new Agency();
agency.rent();
agency.getMoney();
}
}
四.使用场景及使用感受
- 必须记住的一句话是:代理模式是控制对RealSubject的访问。有那些情况我们需要控制对RealSubject的访问呢?RealSubject是远程对象(RMI),你根本访问不到;RealSubject创建开销大;RealSubject需要被保护等等。
- 上面演示的是一个最简单的,最直接的代理模式。真实世界里面的代理模式有很多种变体,这些变体都有一个共同点:都会将客户对主题的方法拦截下来。
- 防火墙代理(Firewall Proxy):控制网络资源的访问,保护主题免于"坏客户"的侵害。
- 智能引用代理(Smart Reference Proxy):当主题被引用时,就行额外的动作,例如计算一个对象被引用的次数。
- 缓存代理(Caching Proxy):为开销大的运算结果提供暂时存储,它也允许多个客户共享结果,以减少计算或网络延迟。
- 同步代理(Synchronization Proxy):在多线程的情况下提供安全的访问。
- 复杂隐藏代理(Complexity Proxy):用来隐藏一个类的复杂集合的复杂度,并进行访问控制。有时候也称为外观代理(Facade
Proxy)。区别外观代理模式和外观模式:外观代理模式归根到底还是代理模式,是代理模式就是为了控制访问,而外观模式只提供另外一组接口。
- 写入时复制代理(Copy-On-Write Proxy):用来控制对象的复制,方法是延迟对象的复制,直到客户真的需要为止。
分享到:
相关推荐
通过学习和掌握这些设计模式,开发者可以更好地理解和应用面向对象的设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。这些原则和模式的结合,可以帮助我们构建出更加模块化、可扩展...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
设计模式代理模式PPT学习教案 本PPT学习教案主要讲解设计模式中的代理模式,通过示例代码和图表,详细介绍了代理模式的定义、结构、实现和应用场景。 知识点1:代理模式的定义 代理模式(Proxy Pattern)是一种...
《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为三大类: 1. **创建型模式**:专注于对象的创建机制,确保系统在合适的时机创建正确的对象。 - **单例模式**...
### 设计模式学习报告 #### 一、设计模式概述 设计模式是一种被广泛接受和使用的编程解决方案,旨在解决软件设计中的常见问题。它不仅能够帮助开发者编写出更易于理解和维护的代码,还能够促进代码的复用性。设计...
对于初学者,可以从理解设计模式的基本概念开始,然后通过实例学习和练习各种模式,接着深入研究C++如何实现这些模式,最后结合实际项目应用,巩固和提升设计模式的运用能力。 总之,《设计模式:可复用面向对象...
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
这个“设计模式学习ppt”资料包显然是一份面向初学者或大学生的教学资源,通过十四个PPT文件深入浅出地讲解了设计模式的各个方面。 首先,我们来看设计模式的基本概念。设计模式是对在特定上下文中反复出现的问题...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是经验丰富的开发者们在解决相似...学习和掌握这些设计模式,对于提升软件开发的专业技能,以及团队间的沟通效率都有着显著的帮助。
这些文档涵盖了设计模式的基础知识,通过阅读和学习,你可以深入了解每种模式的原理、应用场景及其实现方式,从而提升你的软件设计能力。绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的...通过学习和实践这些设计模式,开发者可以更好地应对软件开发中的各种挑战,提高代码复用性,降低系统耦合度,使得代码更加易于理解和修改。
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。...通过深入学习和实践这些设计模式,开发者可以提高代码的可读性、可维护性和可扩展性,从而提升软件工程的效率和质量。
代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用。代理模式的主要目的是为其他对象提供一种代理以...在学习代理模式时,可以尝试编写不同类型的代理,并在实际项目中寻找应用实例,以加深理解。
通过学习这些设计模式,你可以提高代码的可读性、可维护性和复用性,同时提升软件开发的效率。每种模式都有其特定的应用场景,理解这些模式的核心思想和使用场景是关键。提供的源码和图文并茂的注解将帮助你更直观地...
标题提及的"设计模式可复用面向对象软件的基础"是一本经典著作,通常被称为《设计模式:可复用面向对象软件的基础》或简称Gang of Four (GoF) 的设计模式书籍。这本书由Erich Gamma、Richard Helm、Ralph Johnson和...
C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...
这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...
"设计模式复习题.doc" 以下是根据给定文件生成的相关...以上是根据给定文件生成的相关知识点,涵盖了设计模式的种类、基本要素、应用场景、设计原则、实现方式、优点、应用领域、设计模式、常见问题和学习方法等方面。
本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...