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 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 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 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 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 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();
- }
- }
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的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口呗。好了不多说了,慢慢体会吧
相关推荐
Java 设计模式 代理模式介绍,含源码
JAVA-设计模式-结构型模式-代理模式
Java设计模式,代理模式,包含动态代理的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
java常用设计模式-代理模式
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
java设计模式,设计模式公司出品。策略模式,代理模式,单例模式,多例模式,工厂模式,门面模式等。
java模式设计-代理模式之动态代理.ppt
java设计模式视频教程-代理模式, 深层了解java的设计模式
java 模式 设计 代理模式 ,动态代理跟反射机制的内容相关
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
基于Java的设计模式——代理模式demo的实现(高分课设)个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用...
本课程适合所有需要弥补JAVA设计模式的同学,课件内容制作精细,由浅入深,适合入门或进行知识回顾。 【完整课程列表】 基于java程序语言的设计java模式课程 01-设计模式概述(共36页).pptx 基于java程序语言的...
Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)Java设计模式之代理模式(结构)
JAVA设计模式之代理模式实例
1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 状态模式 58 1.3.9 ...
自己写的Java的代理模式的实现,有兴趣的可以下载看看
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
本系统使用Java代码实现,是设计模式的期末课程设计,共使用了5种设计模式,分别是**原型模式、单例模式、抽象工厂模式、代理模式、建造者模式。*,希望对各位有帮助
代理模式JAVA源程,正在学设计模式的朋友可以看下。比较容易理解。