java设计模式之——代理模式
1,什么是代理模式?
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
2,策略模式有什么好处?
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
3,代理模式一般涉及到的角色有:
抽象角色:声明真实对象和代理对象的共同接口;
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
4,应用场景举例:
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时是这样的体现的
先说说这个场景中的要素:一种类型的女人,潘金莲,王婆,西门庆,后来扩展的贾氏也和西门庆勾上了,我们是假设的,然后西门庆找潘金莲happy,但潘金莲不好意思直接,就找个王婆代理呗。我们看看具体代码。
先定义一种女人
- package com.yangguangfu.proxy;
- /**
- *
- * @author 阿福(trygf521@126.com)<br>
- *定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
- */
- public interface KindWoman {
- //这种女人能做什么事情呢?
- public void makeEyesWithMan();//抛媚眼
- public void happyWithMan();//和男人那个....
- }
一种类型嘛,那肯定是接口,定义个潘金莲
- package com.yangguangfu.proxy;
- /**
- *
- * @author 阿福(trygf521@126.com)<br>
- *定义一个潘金莲是什么样的人
- */
- public class PanJinLian implements KindWoman{
- @Override
- public void happyWithMan() {
- System.out.println("潘金莲和男人在做那个...");
- }
- @Override
- public void makeEyesWithMan() {
- System.out.println("潘金莲抛媚眼...");
- }
- }
再定义个丑陋的王婆
- package com.yangguangfu.proxy;
- /**
- *
- * @author 阿福(trygf521@126.com)<br>
- *王婆这个人老聪明了,她太老了,是个男人都看不上她,
- *但是她有智慧经验呀,他作为一类女人的代理!
- */
- public class WangPo implements KindWoman {
- private KindWoman kindWoman;
- public WangPo(){
- //默认的话是潘金莲的代理
- this.kindWoman = new PanJinLian();
- }
- //她可以是KindWomam的任何一个女人的代理,只要你是这一类型
- public WangPo(KindWoman kindWoman){
- this.kindWoman = kindWoman;
- }
- @Override
- public void happyWithMan() {
- //自己老了,干不了了,但可以叫年轻的代替。
- this.kindWoman.happyWithMan();
- }
- @Override
- public void makeEyesWithMan() {
- //王婆年纪大了,谁看她抛媚眼啊
- this.kindWoman.makeEyesWithMan();
- }
- }
两个女主角都上场了,该男主角了,定义个西门庆
- package com.yangguangfu.proxy;
- /**
- *
- * @author 阿福(trygf521@126.com)<br>
- *水浒传是这样写的:西门庆被潘金莲用竹竿敲了一下,西门庆看痴迷了,被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费,那我们假设一下:
- *如果没有王婆在中间牵线,这两个不要脸的能成事吗?难说得很!
- */
- public class XiMenQiang {
- /**
- * @param args
- */
- public static void main(String[] args) {
- WangPo wangPo;
- //把王婆叫出来
- wangPo = new WangPo();
- //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:
- wangPo.makeEyesWithMan();
- //看到没有表面是王婆在做,其实爽的是潘金莲
- wangPo.happyWithMan();
- }
- }
那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去了王婆这个中间环节,直接西门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里面还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个管家苟合的那个),这个名字起的:“贾氏”,那我们也让王婆做她的代理:
- package com.yangguangfu.proxy;
- /**
- *
- * @author 阿福(trygf521@126.com)<br>
- *定义一个贾氏是什么样的人
- */
- public class JiaShi implements KindWoman {
- @Override
- public void happyWithMan() {
- System.out.println("贾氏和男人在做那个...");
- }
- @Override
- public void makeEyesWithMan() {
- System.out.println("贾氏抛媚眼...");
- }
- }
西门庆勾潘金莲又勾引贾氏
- package com.yangguangfu.proxy;
- /**
- *
- * @author 阿福(trygf521@126.com)<br>
- *水浒传是这样写的:西门庆被潘金莲用竹竿敲了一下,西门庆看痴迷了,被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费,那我们假设一下:
- *如果没有王婆在中间牵线,这两个不要脸的能成事吗?难说得很!
- */
- public class XiMenQiang {
- /**
- * @param args
- */
- public static void main(String[] args) {
- WangPo wangPo;
- //把王婆叫出来
- wangPo = new WangPo();
- //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:
- wangPo.makeEyesWithMan();
- //看到没有表面是王婆在做,其实爽的是潘金莲
- wangPo.happyWithMan();
- //西门庆勾引贾氏
- JiaShi jiaShi = new JiaShi();
- wangPo = new WangPo(jiaShi);
- wangPo.makeEyesWithMan();
- wangPo.happyWithMan();
- }
- }
说完这个故事,那我总结一下,代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你
满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口呗。好了不多说了,慢慢体会吧。
- Proxy.zip (8.1 KB)
java设计模式之——代理模式的更多相关文章
- Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景
我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...
- java设计模式6——代理模式
java设计模式6--代理模式 1.代理模式介绍: 1.1.为什么要学习代理模式?因为这就是Spring Aop的底层!(SpringAop 和 SpringMvc) 1.2.代理模式的分类: 静态代 ...
- 夜话JAVA设计模式之代理模式(Proxy)
代理模式定义:为另一个对象提供一个替身或者占位符以控制对这个对象的访问.---<Head First 设计模式> 代理模式换句话说就是给某一个对象创建一个代理对象,由这个代理对象控制对原对 ...
- Java设计模式:代理模式(转)
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一 ...
- Java 设计模式_代理模式(2016-08-19)
概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...
- JAVA设计模式:代理模式&& 装饰模式区别
在前面学习了代理模式和装饰模式后,发现对两者之间有时候会混淆,因此对两者进行了区别和理解: 装饰模式你可以这样理解,就像糖一样,卖的时候商家大多要在外面包一层糖纸,其实原本还是糖. public in ...
- Java设计模式:代理模式(二)
承接上文 三.计数代理 计数代理的应用场景是:当客户程序需要在调用服务提供者对象的方法之前或之后执行日志或者计数等额外功能时,就可以用到技术代理模式.计数代理模式并不是把额外操作的代码直接添加到原服务 ...
- java设计模式之代理模式 ,以及和java 回调机制的区别
java 代理模式就是: 将自己要做的事交给别人去做(这个别人就是代理者,自己就是被代理者),为什么自己能做的要交给别人去做了?假如一个小学生小明,现在要写作业,但是又想玩游戏,他更想玩游戏,并且不想 ...
- Java设计模式之代理模式(Proxy)
前言: 最近在研究Retrofit开源框架的时候,其主要核心代码是通过注解标示参数,动态代理模式实现具体接口,反射机制进行参数解析,最终实现发送请求.其实之前在学习Xutils源码的时候,Xutils ...
- Java设计模式 之 代理模式
所谓的代理模式就是为其它类或对象提供一个代理以控制对这个对象的访问.那么常见的代理有远程代理,虚拟代理,保护代理,智能代理. 1. 远程代理:为一个不同地址空间的对象提供一个本地代理对象. 2. 虚拟 ...
随机推荐
- Centos安装webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...
- c++11介绍
C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称[1] . C++11 ...
- 一封推荐信——android培训机构
我,男,23岁,即将毕业的大四学生,就读于天津一所二本院校,计算机科学与技术专业.大一期间,进入新校园,和同学到各个宿舍推销陶瓷杯,国美电器饮水机促销员,组团蹬车游市区,不断地去探索.尝试,追求内心向 ...
- Lipschitz连续【zz】
转载地址:http://moosewoler.blog.163.com/blog/static/6986605201242643122296/ 李普希兹连续是以德国数学家Rudolf Lipschit ...
- Makefile里调用Shell注意点
http://www.linuxidc.com/Linux/2012-04/59093.htm 大家经常编写和使用Makefile, Makefile里面也经常用到shell, 但对其中一些需要注意的 ...
- PHP出现Notice: unserialize() [function.unserialize]: Error at offset问题的解决方案
有两个原因(据我所知)会导致这个问题: (1) 字符串本身的问题 (2)字符编码的问题. 你unserialize的字符串的编码和文件本身的编码不一致.将文件编码改成和字符串一样的编码.这种问题比较隐 ...
- C#初步接触
如同非常多刚開始学习的人一样,刚接触C#的时候,也是一头雾水,学习了好长时间,都搞不清楚一些基本名称是什么.什么是C#?什么是.net?什么是visual studio?它们之间有什么关系?以下我们就 ...
- Codeforces 433 C. Ryouko's Memory Note
C. Ryouko's Memory Note time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Chrome for Android在Chromium代码库中的提交patch
訪问这个地址: https://codereview.chromium.org/1141283003 主要分为3类:png资源文件.java代码.C++代码,曾经以为这部分不开源的代码主要是C++,事 ...
- .NET程序性能优化基本要领
想了解更多关于新的编译器的信息,可以访问 .NET Compiler Platform ("Roslyn") 基本要领 在对.NET 进行性能调优以及开发具有良好响应性的应 ...