二 代理模式【Proxy Pattern】 来自CBF4LIFE 的设计模式
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人:
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 的设计模式的更多相关文章
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
- 代理模式(Proxy pattern)
代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...
- 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 13.代理模式(Proxy Pattern)
using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...
- 设计模式——代理模式(Proxy Pattern)
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...
- C#设计模式——代理模式(Proxy Pattern)
一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...
- 设计模式(十三):从“FQ”中来认识代理模式(Proxy Pattern)
我们知道Google早就被墙了,所以FQ才能访问Google呢,这个“FQ”的过程就是一个代理的过程.“代理模式”在之前的博客中不止一次的提及过,之前的委托回调就是代理模式的具体应用.今天我们就从“F ...
- 七个结构模式之代理模式(Proxy Pattern)
定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...
随机推荐
- ShardingSphere-proxy-5.0.0分布式哈希取模分片实现(四)
一.说明 主要是对字符串的字段进行hash取模 二.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Found ...
- python-将print内容保存到文件
通过sys.stdout得到print输出的内容,再进行保存 import sys class Logger(object): def __init__(self, file_path: str = ...
- MySQL-4-DDL
DDL:数据定义语言 创建create 创建库 语法:create database [if not exists]库名 # 创建库 CREATE DATABASE IF NOT EXISTS boo ...
- [MRCTF2020]Ezpop-1|php序列化
1.打开题目获取到源代码信息,如下: Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From h ...
- 基于InsightFace的高精度人脸识别,可直接对标虹软
一.InsightFace简介 InsightFace 是一个 2D/3D 人脸分析项目.InsightFace 的代码是在 MIT 许可下发布的. 对于 acadmic 和商业用途没有限制. 包含注 ...
- 对象数组和对象对象数组的for-each循环
对象数组的声明 类名称 对象数组名[] = null: 对象数组名 = new 类名称[长度] 定义并开辟数组 类名称 对象数据名[] = new 类名称[长度]; 在声明一个对象数组后,必须对每个数 ...
- 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错
问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...
- 关于webapi调用wcf并发假死的分析
原来IDFA(IOS推广获取到用户IOS手机的唯一标识,如果不刷机的话跟安卓的IMEI一样)在公司正常的页面是公用用一个网站和数据库的. 起初怀疑并发数太多,把数据库连接池的数量从一百设置到三百,确实 ...
- CSS面试总结
文章首次发表:_时雨_CSDN 1. BFC:块级格式化上下文(重点关注) BFC基本概念:BFC是 CSS布局的一个概念,是一块独立的渲染区域(环境),里面的元素不会影响到外部的元素. BFC原理( ...
- 使用codeblocks创建新项目
很多同学在学习C或C++版的数据结构的时候,自己写项目是一个不错的锻炼方法,而用codeblocks写项目的时候我们就会遇到很多问题了,比如说: 1.如何建立新项目. 2.如何建立头文件和主函数文件. ...