当前位置:首页 > 技术文章 > 正文内容

java设计模式之——代理模式(java中的代理是什么意思)

1,什么是代理模式?

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。

2,策略模式有什么好处?

在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

3,代理模式一般涉及到的角色有:

抽象角色:声明真实对象和代理对象的共同接口;

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

4,应用场景举例:

比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时是这样的体现的

先说说这个场景中的要素:一种类型的女人,潘金莲,王婆,西门庆,后来扩展的贾氏也和西门庆勾上了,我们是假设的,然后西门庆找潘金莲happy,但潘金莲不好意思直接,就找个王婆代理呗。我们看看具体代码。

先定义一种女人

Java代码

  1. package com.yangguangfu.proxy;

  2. publicinterface KindWoman {

  3. //这种女人能做什么事情呢?

  4. publicvoid makeEyesWithMan();//抛媚眼

  5. publicvoid happyWithMan();//和男人那个....

  6. }

一种类型嘛,那肯定是接口,定义个潘金莲

Java代码

  1. package com.yangguangfu.proxy;

  2. publicclass PanJinLian implements KindWoman{

  3. @Override

  4. publicvoid happyWithMan() {

  5. System.out.println("潘金莲和男人在做那个...");

  6. }

  7. @Override

  8. publicvoid makeEyesWithMan() {

  9. System.out.println("潘金莲抛媚眼...");

  10. }

  11. }

再定义个丑陋的王婆

Java代码

  1. package com.yangguangfu.proxy;

  2. publicclass WangPo implements KindWoman {

  3. private KindWoman kindWoman;

  4. public WangPo(){

  5. //默认的话是潘金莲的代理

  6. this.kindWoman = new PanJinLian();

  7. }

  8. //她可以是KindWomam的任何一个女人的代理,只要你是这一类型

  9. public WangPo(KindWoman kindWoman){

  10. this.kindWoman = kindWoman;

  11. }

  12. @Override

  13. publicvoid happyWithMan() {

  14. //自己老了,干不了了,但可以叫年轻的代替。

  15. this.kindWoman.happyWithMan();

  16. }

  17. @Override

  18. publicvoid makeEyesWithMan() {

  19. //王婆年纪大了,谁看她抛媚眼啊

  20. this.kindWoman.makeEyesWithMan();

  21. }

  22. }

两个女主角都上场了,该男主角了,定义个西门庆

Java代码

  1. package com.yangguangfu.proxy;

  2. publicclass XiMenQiang {

  3. publicstaticvoid main(String[] args) {

  4. WangPo wangPo;

  5. //把王婆叫出来

  6. wangPo = new WangPo();

  7. //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:

  8. wangPo.makeEyesWithMan();

  9. //看到没有表面是王婆在做,其实爽的是潘金莲

  10. wangPo.happyWithMan();

  11. }

  12. }

那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去了王婆这个中间环节,直接西门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。

那我们再考虑一下,水浒里面还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个管家苟合的那个),这个名字起的:“贾氏”,那我们也让王婆做她的代理:

Java代码

  1. package com.yangguangfu.proxy;

  2. publicclass JiaShi implements KindWoman {

  3. @Override

  4. publicvoid happyWithMan() {

  5. System.out.println("贾氏和男人在做那个...");

  6. }

  7. @Override

  8. publicvoid makeEyesWithMan() {

  9. System.out.println("贾氏抛媚眼...");

  10. }

  11. }

西门庆勾潘金莲又勾引贾氏

Java代码

  1. package com.yangguangfu.proxy;

  2. publicclass XiMenQiang {

  3. publicstaticvoid main(String[] args) {

  4. WangPo wangPo;

  5. //把王婆叫出来

  6. wangPo = new WangPo();

  7. //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:

  8. wangPo.makeEyesWithMan();

  9. //看到没有表面是王婆在做,其实爽的是潘金莲

  10. wangPo.happyWithMan();

  11. //西门庆勾引贾氏

  12. JiaShi jiaShi = new JiaShi();

  13. wangPo = new WangPo(jiaShi);

  14. wangPo.makeEyesWithMan();

  15. wangPo.happyWithMan();

  16. }

  17. }

说完这个故事,那我总结一下,代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口呗。好了不多说了,慢慢体会吧。

感谢原创作者的原创内容哦!
http://yangguangfu.iteye.com/blog/815787#

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/4228.html

分享给朋友:

“java设计模式之——代理模式(java中的代理是什么意思)” 的相关文章

http请求域名强制跳转https

网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置. ---------------一、采用nginx的rewrite方法--------------------- 下面是将所有的http请求通过rewrite重写到https上。 例如...

了解PHP-FPM

在服务器上,当我们查看php进程时,全都是php-fpm进程,大家都知道这个就是php的运行环境,那么,它到底是个什么东西呢?PHP-FPM简介PHP-FPM,就是PHP的FastCGI管理器,用于替换PHP FastCGI的大部分附加功能,在PHP5.3.3后已经成为了PHP的标配。有小伙伴要问了...

IT30:中台/软件开发团队40人员配置

业务中台40人开发团队配置1、架构师:1名2、开发经理:1名3、开发主管:1名4、前端开发:7名5、后端开发:14名6、DBA:2名7、测试人员:4名8、UI人员:3名9、BA业务顾问:5名架构师 1名任职要求:1. 主导团队技术方向,主导项目技术方向及技术分享;2. 精通高可用互联网架构设计及管理...

银河麒麟V10服务版(FT2000/4 CPU)部署Nginx笔记

将centos或windows系统上运行的系统迁移到银河麒麟V10服务版系统上比较容易,如果您的技术路线是(springboot+vue+mysql)无其他需要操作系统支持的功能,只需要将相关软件环境在操作系统上重新编译运行即可。以麒麟V10 服务版飞腾CPU为例,前后端分离,vue编译了前端代码后...

在Windows系统下部署Flask应用 - Nginx篇

篇在Windows系统下部署Flask应用通常涉及以下步骤:1. 安装Flask首先,确保你已经安装了Flask。可以使用pip进行安装:pip install flask 2. 准备Flask应用创建一个Flask应用,例如app.py:from flask import Flask app =...

Nginx: 最常见的 2 种 http to https 跳转场景

Nginx: 最常见的 2 种 http to https 跳转场景建议点击 查看原文 查看最新内容。原文链接: https://typonotes.com/posts/2023/08/28/nginx-http-https-redirect-scenarios/1. Nginx 上层无代理, 用户...