<四>读<<大话设计模式>>之代理模式
代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比方代理商。在项目的实际应用中也有非常多地方用到。比方spring通过代理模式生成对象等。
代理模式的书面定义:为其它对象提供一种代理以控制对这个对象的訪问。
在某些情况下,一个对象不适合或者不能直接引用还有一个对象,而代理对象能够在client和目标对象之间起到中介的作用。
在《《大话设计模式》》一书中以一个有男朋友的女孩让“小菜”帮忙修电脑的故事展开的,事实上说白了代理就是帮别人干活的,一般老板不出面,都是小弟帮忙做交易。代理模式非常好理解也非常好懂,那就直接来代码吧
1、要追求的姑娘
/*
*
被追求的女孩
*/
publicclass Girl {
private String
name;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
、真正的追求者
/*
*
真实的追求者
*/
publicclass Pursuit
implements GiveGift {
//礼物当然送给女孩了
protected Girl
girl;
public
Pursuit(Girl girl){
this.girl = girl;
}
publicvoid giftChocolate() {
//
TODO Auto-generated method stub
System.out.println("送巧克力给"+girl.getName());
}
publicvoid giftFlowers() {
//
TODO Auto-generated method stub
System.out.println("送花给"+girl.getName());
}
}
、代理中间人
/*
*
代理类
*/
publicclass Proxy
implements GiveGift {
protected Pursuit
pursuit;
//毕竟是代理,真正的还是追求者与女孩的联系
public Proxy(Girl girl){
pursuit =
new Pursuit(girl);
}
publicvoid giftChocolate() {
//
TODO Auto-generated method stub
pursuit.giftChocolate();
}
//花事实上是追求者的
publicvoid giftFlowers() {
//
TODO Auto-generated method stub
pursuit.giftFlowers();
}
}
4、client
publicclass ProxyClient {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
//
TODO Auto-generated method stub
Girlgirl = new Girl();
girl.setName("妹妹");
//真正操作的是代理
Proxyproxy = new Proxy(girl);
proxy.giftChocolate();
proxy.giftFlowers();
}
}
代理模式都在什么场合应用呢?(摘自网络)
1) 远程代理(Remote Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间能够是在同一台主机中,也但是在还有一台主机中,远程代理又叫做大使(Ambassador)
2) 虚拟代理(Virtual Proxy)依据须要创建开销非常大的对象。假设须要创建一个资源消耗较大的对象。先创建一个消耗相对较小的对象来表示,真实对象仅仅在须要时才会被真正创建。
3) 保护代理(Protection Proxy)控制对原始对象的訪问。保护代理用于对象应该有不同的訪问权限的时候。
4) 智能指引(Smart Reference)代替了简单的指针,它在訪问对象时运行一些附加操作。
5) Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到仅仅有在client真正须要时才运行。一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理能够让这个操作延迟。仅仅有对象被用到的时候才被克隆。
总结:本章代理模式非常好理解。代码也非常easy。在这里说一下它的有点吧。职责清晰,真实的角色就是实现实际的业务逻辑。不用关心其它非本职责的事务,通过后期的代理完毕一件完毕事务,附带的结果就是编程简洁清晰。
代理对象能够在client和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
还有就是高扩展性
<四>读<<大话设计模式>>之代理模式的更多相关文章
- <二>读<<大话设计模式>>之策略模式
又和大家见面了.可以坚持写出第二篇文章真不错,好好加油. <<大话设计模式>>解说策略模式是以商场收银软件程序开头的,那么问题来了.哪家商场收银软件强,开玩笑了. 读过上篇文章 ...
- <十二>读<<大话设计模式>>之状态模式
对于状态模式,<<大话设计模式>>是以人从上班到下班到加班的状态来展开讲述的.状态模式事实上就是某一个对象在某个过程或者时间的一个状态记录,可是这个状态的顺序不能发生变化.在程 ...
- 《大话设计模式》c++实现 代理模式
代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 介绍 意图:为其 ...
- <五>读《《大话设计模式》》之工厂模式
怎么又是工厂模式呢?上次不是讲过简单工厂模式吗?不错.此工厂模式非彼工厂模式. 工厂模式:定义一个用于创建对象的接口.让子类决定实例化那一个类,工厂方法是一个类的实例化延迟到其子类. 还是以代码来进行 ...
- 大话设计模式C++版——抽象工厂模式
前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...
- 大话设计模式C++版——工厂方法模式
工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版——简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主 ...
- 【转】设计模式(十一)代理模式Proxy(结构型)
设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ...
- 设计模式之jdk动态代理模式、责任链模式-java实现
设计模式之JDK动态代理模式.责任链模式 需求场景 当我们的代码中的类随着业务量的增大而不断增大仿佛没有尽头时,我们可以考虑使用动态代理设计模式,代理类的代码量被固定下来,不会随着业务量的增大而增大. ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
随机推荐
- 通过文件配置:firewalld.service(5)
firewalld.service Name firewalld.service — firewalld service configuration files Synopsis /etc/firew ...
- 第二篇:zone(区域)
什么是区域? 网络区域定义网络连接的信任级别(the level of trust for network connections).一个网络连接只能是一个区域的一部分,但一个区域可以包含许多网络连接 ...
- CSS基本属性—文本属性和背景属性
一.CSS常用文本属性 [css中的颜色表示方式] 1.直接使用颜色的单词表示:red.green.blue 2.使用颜色的十六进制表示:#ff0000,#00ff00: 六位数,两两 ...
- Canvas基础——钟表绘制
首先,canvas语法基础薄弱的小伙伴请点这里,剩下的小伙伴们可以接着往下看了. 一个表,需要画什么出来呢:3条线(时分秒针),1个圆(表盘),以及60条短线/点(刻度). 嗯,没毛病. 那接下来让我 ...
- (十)MySQL日志
1)日志种类 error log:错误日志 拍错 /var/log/mysqld.log \这是yum安装mysqld生成error默认目录 bin blog 二进制日志 备份 增量备份,记录DDL, ...
- HDU 3507 Print Article(斜率优化推导)
$dp$,斜率优化. 第一次做斜率优化的题目,看了一些题解,自己总结一下. 这题是说有$n$个数字,可以切成任意段,每一段的费用是这一段数字的和平方加上$M$.问最小费用是多少. 设$dp[i]$为$ ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- Codeforces #432 Div2 D
#432 Div2 D 题意 给出一些数字,如果这些数字的的 \(gcd\) 不为1则称这些数字 \(good\). 可以有两种操作: 花费 x 删掉一个数 花费 y 将一个数加 1 问使这些数 \( ...
- 分享Kali Linux 2017年第29周镜像文件
分享Kali Linux 2017年第29周镜像文件 Kali Linux官方于7月16日发布2017年的第29周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE ...
- 后门工具dbd
后门工具dbd dbd功能类似于Netcat,但提供强大的加密功能,支持AES-CBC-128和HMAC-SHA1加密.该工具可以运行在类Unix和Windows系统中.渗透测试人员首先使用该工具 ...