代理模式(结构模式),“代理”就是受当事人委托;代表他进行某种活动;如诉讼、纳税、签订合同等。这当事人可以是一个人,一个单位或一个组织。现在代理这个词应该不陌生,代理商,代理公司,代理人。。。。。。
举个例子,拿房地产代理来说吧。卖房子的人要卖房子,但是他一般不会自己去找买房子的人,为什么捏?原因很多,可能是找不到买房的人,可能是自己很忙,没时间去找。总之自己找很烦,于是他就找了房产代理公司,然后说明自己的条件,房地代理公司根据房主的条件去找买房的人,找到之后并不是直接带给卖方,而是要先看房,跟买方谈条件,如果代理和买方觉得条件都满足,好,代理领他去见卖方完成交易。
这就是典型的代理的例子,UML图中,上面说到的卖方在就是RealSubject面代理公司是Proxy,买方自然就是Client,他们是通过一件事情联系在一起的,买卖房屋,也就是那个Subject接口。
为什么要使用Proxy呢?引用jdon论坛老大BanQ的文章中的一段:
1.授权机制 不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问 论坛有两种人:注册用户和游客(未注册用户),Jive中就通过类似ForumProxy这样的代理来控制这两种用户对论坛的访问权限. (注:也就是说卖方不会去见所有要买房子的人,因为有些人可能不符合条件)
2.某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.
举例两个具体情况:
(1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.
(2)如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.
(注:提高效率,让代理公司在后面去忙吧,我还可以做我自己的事情)
这就是使用Proxy的原因。
1确立功能
package dcr.study.dp.proxy;
public interface ISaleHouse {
void findBuyer();//找买方
void negotiation();//谈判
void complete();//成交
}
2实现功能
package dcr.study.dp.proxy;
public class RealSaleHouse implements ISaleHouse {
public void complete() {
System.out.println("与买方成交");
}
public void findBuyer() {
System.out.println("找买家");
}
public void negotiation() {
System.out.println("带买家看房,谈价格");
}
}
3建立代理
package dcr.study.dp.proxy;
/*
* 这个类里面并没有真正的实现findBuyer,complete和negotiation
* 而是在一些条件满足后,找到实际程序去完成这些操作。
* 比如,你可以把权限的验证放在这里
*/
public class SaleHouseProxy implements ISaleHouse {
private ISaleHouse saleHouse;
//这里,一个代理公司不会只代理一个房子,你想买哪个
//房子随你选,所以在构造里,我们可以选择我们要看的
//实际的房子
public SaleHouseProxy(ISaleHouse sh){
this.saleHouse = sh;
}
public void complete() {
//一些成交的条件如果满足,则找卖方完成交易
this.saleHouse.complete();
}
public void findBuyer() {
this.saleHouse.complete();
}
public void negotiation() {
//帮助卖方去谈一些条件
this.saleHouse.negotiation();
}
}
4调用
package dcr.study.dp.proxy;
public class Application {
public static void main(String[] args) {
//这里如果传入别的ISaleHouse的实现,就实现选择不同的房子
ISaleHouse sh =
new SaleHouseProxy(new RealSaleHouse());
sh.findBuyer();
sh.negotiation();
sh.complete();
}
}
- 大小: 49.2 KB
分享到:
相关推荐
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...
这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...
这些文档涵盖了设计模式的基础知识,通过阅读和学习,你可以深入了解每种模式的原理、应用场景及其实现方式,从而提升你的软件设计能力。绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可复用性。这些模式是面向对象编程中的一种最佳实践,通过标准化的方式处理常见的设计问题。下面...
设计模式的学习不仅帮助我们编写更可维护、可扩展的代码,还能提高团队间的沟通效率,因为它们提供了通用的语言和解决方案。在实际开发中,灵活运用这些设计模式可以有效解决设计问题,提升代码质量。因此,深入理解...
在这个“#资源大人分享计划# 设计模式学习笔记.rar”压缩包中,我们可以期待找到一系列关于设计模式的详细学习资料,包括定义、类图、代码示例以及各种使用场景,这些都将帮助我们深入理解并掌握设计模式。...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的...设计模式笔记中的内容应该涵盖了以上所述的各种模式,通过深入学习和实践,你可以将这些模式应用到实际项目中,提升自己的编程技能和设计能力。
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...
这份"根据《JAVA与设计模式》整理的笔记及示例代码"涵盖了Java语言和设计模式的核心概念,旨在帮助开发者理解和应用这些模式。 一、设计模式的基本概念 设计模式是对在特定情境下软件设计问题的解决方案的一种描述...
"GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...
这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...
《C++20设计模式》学习笔记-第12章代理模式-配套代码
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...