什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人:

package proxyPartern;

/**
* @author lhb
* @类名 IWoman
* @描述 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
* @时间 2022/6/8 11:09
* @版本
**/
public interface IWoman {
//抛媚眼
public void makeEyessWithMan();
//和男人快乐
public void happyWithMan();
}

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

package proxyPartern;

/**
* @author lhb
* @类名 PanJinLian
* @描述 定一个潘金莲是什么样的人
* @时间 2022/6/8 11:13
* @版本
**/
public class PanJinLian implements IWoman{ @Override
public void makeEyessWithMan() {
System.out.println("pin jin lian can make eyes to man!");
} @Override
public void happyWithMan() {
System.out.println("pin jin lian happy with man!");
}
}

再定一个丑陋的王婆:  专门代理各种不安分的美眉

package proxyPartern;

/**
* @author lhb
* @类名 WangPo
* @描述 王婆这个人老聪明了,她太老了,是个男人都看不上, 但是她有智慧有经验呀,她作为一类女人的代理!
* @时间 2022/6/8 11:15
* @版本
**/
public class WangPo implements IWoman{ private IWoman panJinLian; public WangPo(IWoman woman){
this.panJinLian = woman;
} @Override
public void makeEyessWithMan() {
//王婆这么大年龄了,谁看她抛媚眼?!
this.panJinLian.makeEyessWithMan();
} public IWoman getPanJinLian() {
return panJinLian;
} public void setPanJinLian(IWoman panJinLian) {
this.panJinLian = panJinLian;
} @Override
public void happyWithMan() {
//王婆这么大年纪了.干部了了.直接交给潘金莲吧.
this.panJinLian.happyWithMan();
}
}

两个女主角都上场了,男主角也该出现了: 西门庆开始召唤王婆......

package proxyPartern;

/**
* @author lhb
* @类名 XiMenQing
* @描述 定义一个西门庆,这人色中饿鬼
* @时间 2022/6/8 11:19
* @版本
**/
public class XiMenQing { /** 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
* 收了不少好处费,那我们假设一下:
* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
*/ public static void main(String[] args) {
//西门庆喊王婆出厂
WangPo wangPo = new WangPo(new PanJinLian());
//虽然王婆在做.其实是代理人在爽
wangPo.makeEyessWithMan();
wangPo.happyWithMan();
}
}

王婆是个万能的代理人. 咱们再让他代理一个国际友人苍老师

先定义苍老师

package proxyPartern;

/**
* @author lhb
* @类名 CangLaoShi
* @描述 苍老师 可是万能的.和谁都能happy.
* @时间 2022/6/8 11:41
* @版本
**/
public class CangLaoShi implements IWoman{
@Override
public void makeEyessWithMan() {
System.out.println("cang laoshi make some eyes to some body");
} @Override
public void happyWithMan() {
System.out.println("cang laoshi make make happy wiht some body");
}
}

西门庆又来召唤 王婆了.

package proxyPartern;

/**
* @author lhb
* @类名 XiMenQing
* @描述 定义一个西门庆,这人色中饿鬼
* @时间 2022/6/8 11:19
* @版本
**/
public class XiMenQing { /** 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
* 收了不少好处费,那我们假设一下:
* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
*/ public static void main(String[] args) {
//西门庆喊王婆出厂
WangPo wangPo = new WangPo(new PanJinLian());
//虽然王婆在做.其实是代理人在爽
wangPo.makeEyessWithMan();
wangPo.happyWithMan();
//第二天 再次呼唤王婆 代理苍老师了. 前提西门庆知道王婆代理谁
wangPo = new WangPo(new CangLaoShi());
//虽然王婆在做.其实是代理的人苍老师在干活
wangPo.makeEyessWithMan();
wangPo.happyWithMan();
}
}

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

二 代理模式【Proxy Pattern】 来自CBF4LIFE 的设计模式的更多相关文章

  1. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...

  2. 代理模式(Proxy pattern)

    代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...

  3. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  4. 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释

    代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...

  5. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 13.代理模式(Proxy Pattern)

    using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...

  7. 设计模式——代理模式(Proxy Pattern)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...

  8. C#设计模式——代理模式(Proxy Pattern)

    一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...

  9. 设计模式(十三):从“FQ”中来认识代理模式(Proxy Pattern)

    我们知道Google早就被墙了,所以FQ才能访问Google呢,这个“FQ”的过程就是一个代理的过程.“代理模式”在之前的博客中不止一次的提及过,之前的委托回调就是代理模式的具体应用.今天我们就从“F ...

  10. 七个结构模式之代理模式(Proxy Pattern)

    定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...

随机推荐

  1. ExtJS 布局-HBox 布局(HBox layout)

    更新记录: 2022年6月11日 更新文章结构. 2022年6月8日 发布. 2022年6月1日 开始. 1.说明 hbox布局与column布局几乎相同,但hbox允许拉伸列的高度. 既可以在水平方 ...

  2. QT软件工程师招聘市场需求报告

    QT软件工程师招聘市场需求报告 目录 最流行的编程语言排行榜 QT软件工程师职位需求 QT软件工程师薪资待遇 QT软件工程师行业需求 QT软件工程师QT技术需求 QT软件工程师基础技术需求 QT软件工 ...

  3. SAP Web Dynpro-协助类

    在Web Dynpro组件中,您可以创建从抽象类继承的唯一分配的类. 协助类可以存储组件中必需的但未与布局链接的编码. 您可以将动态文本存储在协助类中,也可以在运行时合并文本,也可以将变量存储在文本池 ...

  4. Python之枚举法解数学题

    作为初二的学生,数学题总是令我苦恼的问题.尤其是我们这里的预备班考试(即我们这里最好的两所高中提前一年招生,选拔尖子生的考试)将近,我所面对的数学题越发令人头疼. 这不,麻烦来了: 如图,在正方形AB ...

  5. Linux YUM制作自己的yum repository

    Linux YUM制作自己的yum repository 配置步骤: 1.通过网络发布自己的package目录 2.创建本地repository 3.配置自己的yum源 操作实现: 1 安装creat ...

  6. Linux环境下ProxyChains应用网络代理

    1.下载源码 git clone https://github.com.cnpmjs.org/rofl0r/proxychains-ng.git 或者 https://hub.fastgit.org/ ...

  7. HCNP Routing&Switching之BFD

    BFD技术背景 什么是BFD?它的主要作用是做什么的,这是我们学习BFD需要搞清楚的地方: BFD是Bidirectional Forwarding Detection的缩写,翻译成中文就是双向转发检 ...

  8. 【FAQ】应用内支付服务无法拉起支付页面常见原因分析和解决方法

    华为应用内支付服务(In-App Purchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种 ...

  9. kube-scheduler的调度上下文

    前一章节了解到了kube-scheduler中的概念,该章节则对调度上下文的源码进行分析 Scheduler Scheduler 是整个 kube-scheduler 的一个 structure,提供 ...

  10. NOI / 1.4编程基础之逻辑表达式与条件分支讲解-02:输出绝对值

    02:输出绝对值 总时间限制: 1000ms 内存限制: 65536kB 题目: 描述 输入一个浮点数,输出这个浮点数的绝对值. 输入 输入一个浮点数,其绝对值不超过10000. 输出 输出这个浮点数 ...