设计模式之第16章-代理模式(Java实现)

  “现在朋友圈真是太让人蛋疼了啊。”“怎么说?”“一堆代理,各种卖东西的,看着好烦人。”“哎,删了呗。”“都是朋友,哪里好意思删啊。”“这倒也是、、、哎,迫于生计,没办法咯。还好我不玩。”“对了,你不就是代理的鼻祖么,身为代理模式,你作何感想。”“以代理之道还治代理之身啊。”

代理模式之自我介绍

  最近出场率超级高,哦不,一直以来出场率都挺高的说的大名鼎鼎的模式,就是我-代理模式是也。有关我的定义如下:Provide a surrogate or placeholder for another object to control access to it.翻译过来就是说:为其他的对象提供一种代理以控制对这个对象的访问。通用类图如下:

  代理模式又被称作委托模式,它是一项基本设计技巧。许多其他的模式,如策略、访问者模式本质上是在更特殊场合采用了代理模式,在日常应用中,代理模式也可以提供非常好的访问控制。在Struts2中的Form元素映射中就采用了动态代理模式。

代理模式之自我分析

  使用我的好处如下:

  • 职责清晰。真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务。
  • 高扩展性,具体的主题角色可以随时变化,只要其实现了接口,不用管它如何变化,都可以使用接口来使用方法。

代理模式之实现

  具体的情景我们就以朋友圈卖吃的来说吧,恩,就卖辣条好了。首先是一个公司的接口类,实现每个公司的简单功能:

 public interface ICompany{
//打上品牌
public void brand(String brand);
//出售
public void sell();
}

  然后是公司的具体实现类:

 public class Company implements ICompany{
private String name = "";
//构造函数获取名字
public Company(String name){
this.name = name;
} //注册商标
public void brand(String name){
System.out.println("公司的名字是:"+name);
} //出售产品
public void sell(){
System.out.println("最后三天清仓处理,买一箱送三箱。。。");
}
}

  最后是最重要的代理实现了:

 public class Proxy implements ICompany{
private ICompany cp = null;
//通过构造函数传递代理的公司
public Proxy(ICompany cp){
this.cp = cp;
}
//代理在朋友圈打品牌
public viod brand(String name){
this.cp.brand(name);
} //代理在卖东西
public void sell(){
this.cp.sell();
}
}

  好了,基本上实现就是这样了,最后友情送上场景类一个:

 public class Client{
public static void main(String[] args) {
//卫龙辣条,我的最爱
ICompany cp = new Company("卫龙");
//定义一个代理,来卖辣条
ICompany proxy = new Proxy(cp);
//代理打品牌
proxy.brand("卫龙");
//代理出售
proxy.sell();
}
}

  至此,实现部分完毕。

代理模式之应用场景

  场景真是数也数不清了,找人LOL、魔兽各种代练,找人代理卖房买房什么的老多了。下面说几种常见的代理情况:

  • 远程代理:为一个对象在不同地址空间提供局部的代理代表。
  • 虚代理:根据需要创建开销很大的对象。
  • 保护代理:控制对原始对象的访问。
  • 智能指引:取代了简单的指针,它在访问对象时执行一些附加操作。

  荆轲刺秦王,设计模式心中藏,好了,今天到此结束。

  PS:本博客欢迎转发,但请注明博客地址及作者~

  博客地址:http://www.cnblogs.com/voidy/

  博客新址:http://voidy.net

  <。)#)))≦

设计模式之第16章-代理模式(Java实现)的更多相关文章

  1. 设计模式之第7章-外观模式(Java实现)

    设计模式之第7章-外观模式(Java实现) “鱼哥,知道怎么把大象装进冰箱里面么?”(作者按:这么简单的问题还想考我,早了几百年吧.)“把大象装进冰箱里,一共需要三步:第一步,把冰箱门打开:第二步,把 ...

  2. 设计模式之第22章-组合模式(Java实现)

    设计模式之第22章-组合模式(Java实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...

  3. 设计模式之第21章-状态模式(Java实现)

    设计模式之第21章-状态模式(Java实现) “what are you 干啥了?怎么这么萎靡不振?”“昨晚又是补新番,又是补小笼包,睡得有点晚啊.话说杨过的那个雕兄真是太好了,每天给找蛇胆,又陪练武 ...

  4. 设计模式之第20章-访问者模式(Java实现)

    设计模式之第20章-访问者模式(Java实现) “嘿,你脸好红啊.”“精神焕发.”“怎么又黄了?”“怕冷,涂的,涂的,蜡.”“身上还有酒味,露馅了吧,原来是喝酒喝的啊.”“嘿嘿,让,让你发现了,今天来 ...

  5. 设计模式之第17章-备忘录模式(Java实现)

    设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...

  6. 设计模式之第14章-命令模式(Java实现)

    设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习 ...

  7. 设计模式之第11章-建造者模式(Java实现)

    设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是 ...

  8. 设计模式之第10章-桥接模式(Java实现)

    设计模式之第10章-桥接模式(Java实现) “一入软件深似海,从此早睡是路人.黑夜给了我黑色的眼睛,我却用他去寻找八阿哥.”“怎么了,又来那么多的感慨啊.”“还能有什么啊,老板是说让换个APP做,这 ...

  9. 设计模式之第9章-原型模式(Java实现)

    设计模式之第9章-原型模式(Java实现) “快到春节了,终于快放假了,天天上班好累的说.”“确实啊,最近加班比较严重,项目快到交付了啊.”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧, ...

随机推荐

  1. 数据库SQL优化大总结之 百万级数据库优化方案2

      网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后, ...

  2. vue指令总结(二)

    一.vue指令 1.v-text v-text是用于操作纯文本,它会替代显示对应的数据对象上的值.当绑定的数据对象上的值发生改变,插值处的内容也会随之更新.注意:此处为单向绑定,数据对象上的值改变,插 ...

  3. 实战:ADFS3.0单点登录系列-集成Exchange

    本文将介绍如何将Exchange与ADFS集成,从而实现对于Exchange的SSO. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0 ...

  4. 解决mysql连接输入密码提示Warning: Using a password on the command line interface can be insecure

    有时候客户端连接mysql需要指定密码时(如用zabbix监控mysql)5.6后数据库会给出个警告信息 mysql -uroot -pxxxx Warning: Using a password o ...

  5. 【BZOJ3106】[CQOI2013] 棋盘游戏(对抗搜索)

    点此看题面 大致题意: 在一张\(n*n\)的棋盘上有一枚黑棋子和一枚白棋子.白棋子先移动,然后是黑棋子.白棋子每次可以向上下左右四个方向中任一方向移动一步,黑棋子每次则可以向上下左右四个方向中任一方 ...

  6. mongodb索引 全文索引使用限制

    全文索引非常强大,但是同样存在很多限制,我们来看以下去全文索引的使用限制: 1.每次查询,只能指定一个$text查询 2.$text查询不能出现在$nor查询中 之前没有接触过$nor查询,$nor查 ...

  7. file - 确定文件类型

    总览 file [ -bcnsvzL ] [ -f 命名文件 ] [ -m 幻数文件 ] file ... 描述 本手册页说明了3.27版本 file 命令的使用. File 命令试图检查每个参数以判 ...

  8. 使用webpack从零开始搭建react项目

    webpack中文文档 webpack的安装 yarn add webpack@3.10.1 --dev 需要处理的文件类型 webpack常用模块 webpack-dev-server yarn a ...

  9. Virtuabox 虚拟机克隆方法

    起初我觉得直接复制一个.vdi 虚拟硬盘再挂上去就可以了,没想到 Virtualbox居然提示UUID重复,看起来就是有点像com生成的那种ID, 查了一下,才知道原来不能这么用 可以通过Vritua ...

  10. C# 运用DirectoryInfo类和FileInfo类

    DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类.然而你却可以运用由该类定 ...