1,什么是代理模式?
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
2,策略模式有什么好处?
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
3,代理模式一般涉及到的角色有:
抽象角色:声明真实对象和代理对象的共同接口;
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
4,应用场景举例:
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时是这样的体现的
先说说这个场景中的要素:一种类型的女人,潘金莲,王婆,西门庆,后来扩展的贾氏也和西门庆勾上了,我们是假设的,然后西门庆找潘金莲happy,但潘金莲不好意思直接,就找个王婆代理呗。我们看看具体代码。
先定义一种女人
Java代码
1.package com.yangguangfu.proxy;
2./**
3. *
4. * @author 阿福(trygf521@126.com)<br>
5. *定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
6. */
7.public interface KindWoman {
8.
9. //这种女人能做什么事情呢?
10. public void makeEyesWithMan();//抛媚眼
11.
12. public void happyWithMan();//和男人那个....
13.
14.}
package com.yangguangfu.proxy;
/**
*
* @author 阿福(trygf521@126.com)<br>
*定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
*/
public interface KindWoman {
//这种女人能做什么事情呢?
public void makeEyesWithMan();//抛媚眼
public void happyWithMan();//和男人那个....
}
一种类型嘛,那肯定是接口,定义个潘金莲
Java代码
1.package com.yangguangfu.proxy;
2./**
3. *
4. * @author 阿福(trygf521@126.com)<br>
5. *定义一个潘金莲是什么样的人
6. */
7.public class PanJinLian implements KindWoman{
8.
9. @Override
10. public void happyWithMan() {
11. System.out.println("潘金莲和男人在做那个...");
12.
13. }
14.
15. @Override
16. public void makeEyesWithMan() {
17. System.out.println("潘金莲抛媚眼...");
18.
19. }
20.
21.}
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("潘金莲抛媚眼...");
}
}
再定义个丑陋的王婆
Java代码
1.package com.yangguangfu.proxy;
2./**
3. *
4. * @author 阿福(trygf521@126.com)<br>
5. *王婆这个人老聪明了,她太老了,是个男人都看不上她,
6. *但是她有智慧经验呀,他作为一类女人的代理!
7. */
8.public class WangPo implements KindWoman {
9.
10. private KindWoman kindWoman;
11.
12. public WangPo(){
13. //默认的话是潘金莲的代理
14. this.kindWoman = new PanJinLian();
15. }
16. //她可以是KindWomam的任何一个女人的代理,只要你是这一类型
17. public WangPo(KindWoman kindWoman){
18. this.kindWoman = kindWoman;
19. }
20.
21. @Override
22. public void happyWithMan() {
23. //自己老了,干不了了,但可以叫年轻的代替。
24. this.kindWoman.happyWithMan();
25.
26. }
27.
28. @Override
29. public void makeEyesWithMan() {
30. //王婆年纪大了,谁看她抛媚眼啊
31. this.kindWoman.makeEyesWithMan();
32.
33. }
34.
35.}
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();
}
}
两个女主角都上场了,该男主角了,定义个西门庆
Java代码
1.package com.yangguangfu.proxy;
2./**
3. *
4. * @author 阿福(trygf521@126.com)<br>
5. *水浒传是这样写的:西门庆被潘金莲用竹竿敲了一下,西门庆看痴迷了,被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费,那我们假设一下:
6. *如果没有王婆在中间牵线,这两个不要脸的能成事吗?难说得很!
7. */
8.public class XiMenQiang {
9.
10. /**
11. * @param args
12. */
13. public static void main(String[] args) {
14. WangPo wangPo;
15. //把王婆叫出来
16. wangPo = new WangPo();
17. //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:
18. wangPo.makeEyesWithMan();
19. //看到没有表面是王婆在做,其实爽的是潘金莲
20. wangPo.happyWithMan();
21.
22.
23.
24. }
25.
26.}
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();
}
}
那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去了王婆这个中间环节,直接西门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里面还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个管家苟合的那个),这个名字起的:“贾氏”,那我们也让王婆做她的代理:
Java代码
1.package com.yangguangfu.proxy;
2./**
3. *
4. * @author 阿福(trygf521@126.com)<br>
5. *定义一个贾氏是什么样的人
6. */
7.public class JiaShi implements KindWoman {
8.
9. @Override
10. public void happyWithMan() {
11. System.out.println("贾氏和男人在做那个...");
12.
13. }
14.
15. @Override
16. public void makeEyesWithMan() {
17. System.out.println("贾氏抛媚眼...");
18.
19. }
20.
21.
22.}
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("贾氏抛媚眼...");
}
}
西门庆勾潘金莲又勾引贾氏
Java代码
1.package com.yangguangfu.proxy;
2./**
3. *
4. * @author 阿福(trygf521@126.com)<br>
5. *水浒传是这样写的:西门庆被潘金莲用竹竿敲了一下,西门庆看痴迷了,被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费,那我们假设一下:
6. *如果没有王婆在中间牵线,这两个不要脸的能成事吗?难说得很!
7. */
8.public class XiMenQiang {
9.
10. /**
11. * @param args
12. */
13. public static void main(String[] args) {
14. WangPo wangPo;
15. //把王婆叫出来
16. wangPo = new WangPo();
17. //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:
18. wangPo.makeEyesWithMan();
19. //看到没有表面是王婆在做,其实爽的是潘金莲
20. wangPo.happyWithMan();
21.
22.
23.
24. //西门庆勾引贾氏
25. JiaShi jiaShi = new JiaShi();
26. wangPo = new WangPo(jiaShi);
27. wangPo.makeEyesWithMan();
28. wangPo.happyWithMan();
29.
30. }
31.
32.}
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动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...
总结一下,Java代理模式的核心在于`Proxy`类和`InvocationHandler`接口,它们共同实现了在运行时动态创建符合特定接口的代理对象。通过代理,我们可以在不修改原始对象代码的情况下,添加额外的功能或者控制对原始...
Java代理模式是一种设计模式,它允许我们为一个对象创建一个代理对象,该代理对象在调用实际对象的方法之前或之后可以执行额外的操作。这在不修改原有对象代码的情况下,提供了扩展功能的可能性。代理模式通常分为两...
Java代理模式是一种设计模式,它允许我们为现有的对象创建一个代理对象,以便在不修改原对象的情况下增强或扩展其功能。这种模式在处理需要添加额外逻辑但又不想修改原始类的场景时尤其有用,比如日志、事务管理、...
### Java代理模式和动态代理详解 #### 一、概述 在软件工程中,代理模式是一种常用的软件设计模式,主要用于在不直接暴露目标对象的情况下提供一个替代接口。这种模式可以简化客户端与目标对象之间的交互,同时还...
Java代理模式是一种设计模式,它允许我们为一个对象创建一个代理,这个代理对象可以在不影响原始对象功能的基础上,增强或扩展其行为。代理模式在软件开发中广泛应用,例如用于权限控制、事务管理、日志记录等场景。...
在给定的“java代理模式示例源码”中,我们可以通过房产中介的例子来理解这种模式。 房产中介在现实生活中,是客户与房东之间的桥梁,它可以代表客户处理租赁事宜,也可以在房东和客户之间传递信息,这与代理模式的...
Java代理模式是一种设计模式,它允许我们为一个对象创建一个代理,这个代理对象可以在调用原始对象的方法之前或之后执行额外的操作。代理模式在软件工程中有多种应用,例如:增加安全控制、性能监控、事务管理等。...
Java代理模式 事例很生动,非常容易理解,推荐给大家。
在本实例中,我们将深入探讨Java中的代理模式及其应用。 代理模式的核心思想是为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用。它可以控制目标对象的访问,也可以在调用目标对象的...
用java实现代理模式,使用房屋中介的现实例子进行代理模式的说明
Java代理模式.pdf