设计模式学习笔记——代理模式
来源:互联网 发布:陕甘回乱 左中堂知乎 编辑:程序博客网 时间:2024/06/06 02:09
代理模式
代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。
结构图
Subject:定义了RealSubject和Proxy的共用接口,可以实现任何使用RealSubject的地方都可以使用Proxy
RealSubject:定义Proxy所代表的真实实体。
Proxy:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,代替实体。
代码实现
Subject类:
/** * 定义RealSubject和Proxy的共用接口 * @author xukai * 2016年3月8日 下午9:59:27 */public abstract class Subject {public abstract void request();}RealSubject类:
/** * Proxy所代表的真实实体 * @author xukai * 2016年3月8日 下午10:00:47 */public class RealSubject extends Subject {@Overridepublic void request() {System.out.println("真实的请求");}}Proxy类:
/** * 代理类 * @author xukai * 2016年3月8日 下午10:02:18 */public class Proxy extends Subject {RealSubject realSubject;@Overridepublic void request() {if(realSubject == null){realSubject = new RealSubject();}realSubject.request();}}客户端:
public class ProxyClient {public static void main(String[] args) {Proxy proxy = new Proxy();proxy.request();}}
控制台输出:
DEMO
问题:使用代理模式实现功能,追求者对被追求者送礼物,通过代理者实现此功能。
接口GiveGift:
/** * 定义动作接口,追求者和代理者都具有的动作 * @author hcc */public interface GiveGift {public void giveDolls();public void giverFlowers();public void giveChocolate();}追求者Pursuit类:
/** * 追求者,动作的发出者。 * 被追求的人并不认识追求者 * @author hcc * */public class Pursuit implements GiveGift {SchoolGirl mm;public Pursuit(SchoolGirl mm) {this.mm = mm;}@Overridepublic void giveDolls() {System.out.println("送洋娃娃");}@Overridepublic void giverFlowers() {System.out.println("送花");}@Overridepublic void giveChocolate() {System.out.println("送巧克力");}}代理者ProxyPursuit类:
/** * 代理者:代替追求者执行动作 * @author hcc * */public class ProxyPursuit implements GiveGift {Pursuit gg;public ProxyPursuit(SchoolGirl mm) {gg = new Pursuit(mm);}@Overridepublic void giveDolls() {gg.giveDolls();}@Overridepublic void giverFlowers() {gg.giverFlowers();}@Overridepublic void giveChocolate() {gg.giveChocolate();}}客户端测试:
public class ProxyTest {public static void main(String[] args) {SchoolGirl mm = new SchoolGirl();mm.setName("漂亮妹子");ProxyPursuit proxy = new ProxyPursuit(mm);proxy.giveDolls();proxy.giveChocolate();proxy.giverFlowers();}}输出结果:
*注:被追求者不知道追求者的存在,代理者认识被追求者,同样认识追求者。
1.远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不容地址空间的事实
2.虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。(浏览器加载图片)
3.安全代理:用来控制真实对象访问时的权限。
4.智能指引,指当调用真实的对象时,代理处理另外一些事。
总结
代理模式应用
2.虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。(浏览器加载图片)
3.安全代理:用来控制真实对象访问时的权限。
4.智能指引,指当调用真实的对象时,代理处理另外一些事。
1 0
- 设计模式学习笔记—代理模式
- HeadFirst 设计模式学习笔记12——代理模式
- 设计模式学习笔记——代理模式
- 《Head First 设计模式》学习笔记——代理模式
- 设计模式学习笔记——代理模式
- 设计模式学习笔记——代理模式
- 设计模式学习笔记——代理(Proxy)模式
- 学习笔记——JAVA设计模式<6>代理模式
- 四、代理模式——设计模式学习笔记
- 设计模式学习笔记—代理模式(Proxy)
- 学习设计模式——代理模式
- 设计模式学习笔记之代理模式
- 【设计模式】代理模式学习笔记
- 设计模式学习笔记--代理(Proxy)模式
- 设计模式学习笔记之代理模式
- 设计模式学习笔记--代理模式
- 设计模式学习笔记-代理模式
- 设计模式学习笔记--代理模式
- 25.Oracle深度学习笔记——SQL PROFILE概要文件
- Codeforces Round #345 (Div 2)
- Java基础02-变量,数据类型及其转换
- 利用Python进行数据分析---ch02《MovieLens 1M数据集(下)》读书笔记
- javascript兼容性大盘点
- 设计模式学习笔记——代理模式
- 24.Oracle深度学习笔记——使用存储提纲
- Html+CSS 学习第二天
- 23.Oracle深度学习笔记——内存架构之SGA Buffer Cache
- DevExpress使用dataset变量关联报表数据
- 【JAVA】33、创建多个对象
- win10 UWP Hmac
- hadoop 学习笔记
- windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)