文档章节

结构型模式之七:代理模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:46
字数 531
阅读 42
收藏 0
点赞 0
评论 0

这个篇文章是从外国文章(PS:瞄了一下,好像是金瓶梅!囧!)中翻译所得,用了一个古代的故事来解释设计模式。

1、什么就代理模式

我实在太忙去响应你的请求,所以你去找我的代理者,代理必须知道委托者能做什么,因此,他们有共同的接口,代理不能做,但是委托者能做,你可以忽略你不懂的人物。

2、代理模式的故事

这有一个从水浒传中翻译过来的有趣故事,可能我翻译之后不是很有趣,但是这是一个代理模式的好例子。 这就是情况 有一些坏男人,不知什么原因,总是喜欢跟好男人的老婆睡觉,在这些妻子中,有些也喜欢和坏男人睡觉,有些不喜欢,坏男人不好直接去问这些妻子,因为他们不确定哪些妻子喜欢做坏事,如果他做出坏的决定将会出现很坏的情况,所以这些坏男人需要一个代理去做这些事。 在场景中,我们有这些角色: CheatingWife/SluttyWife,一个接口定义他们经常做的事,如和坏男人欢喜~ HouseWifeOne,她是一个在家中放荡的妻子 Mike,他喜欢和别人的妻子睡觉 Business Agent, 做这一类的咨询业务

3、代理模式的类图

 

4、 Java代码

1 定义诈骗妻子类型 

2 定义诈骗妻子1号 

3 定义坏人代理 

4 让坏人开始做坏事

interface CheatingWife {
  // think about what this kind of women can do
  public void seduceMan(); // such as eye contact with men
 
  public void happyWithMan(); // happy what? You know that.
}
 
class HouseWifeOne implements CheatingWife {
 
  public void seduceMan() {
    System.out
        .println("HouseWifeOne secude men, such as making some sexy poses ...");
  }
 
  public void happyWithMan() {
    System.out.println("HouseWifeOne is happy with man ...");
  }
}
 
class BusinessAgent implements CheatingWife {
  private CheatingWife cheatingWife;
 
  public BusinessAgent() {
 
    this.cheatingWife = new HouseWifeOne();
  }
 
  public BusinessAgent(CheatingWife cheatingWife) {
    this.cheatingWife = cheatingWife;
  }
 
  public void seduceMan() {
    this.cheatingWife.seduceMan();
  }
 
  public void happyWithMan() {
    this.cheatingWife.happyWithMan();
  }
 
}
 
// see? it looks that agent/proxy is doing
public class Mike {
 
  public static void main(String[] args) {
    BusinessAgent businessAgent = new BusinessAgent();
    businessAgent.seduceMan();
    businessAgent.happyWithMan();
  }
}

以上文章翻译自: http://www.programcreek.com/2009/10/proxy-design-pattern-in-a-funny-story/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu ⋅ 2017/11/02 ⋅ 0

【软考学习】设计模式——解释器模式

【背景】 设计模式是非常重要的一块知识,每个设计模式都值得深入了解和学习。 【内容】 结构型设计模式总结: 解释器设计模式总结: 一、定义:给定一个语言,定义它的文法的一种表示,并定...

yym15732626210 ⋅ 01/31 ⋅ 0

【软考学习】设计模式——状态模式

【背景】 设计模式是非常重要的一块知识,每个设计模式都值得深入了解和学习。 【内容】 结构型设计模式总结: 状态设计模式总结: 一、定义:当一个对象的内在状态改变时允许改变其行为,这...

yym15732626210 ⋅ 01/31 ⋅ 0

【软考学习】设计模式——访问者模式

【背景】 设计模式是非常重要的一块知识,每个设计模式都值得深入了解和学习。 【内容】 结构型设计模式总结: 访问者设计模式总结: 一、定义:表示一个作用于某对象结构中的各元素的操作。...

yym15732626210 ⋅ 01/31 ⋅ 0

【软考学习】设计模式——中介者模式

【背景】 设计模式是非常重要的一块知识,每个设计模式都值得深入了解和学习。 【内容】 结构型设计模式总结: 中介者设计模式总结: 一、定义:用于一个中介对象来封装一系列的对象交互。中...

yym15732626210 ⋅ 01/31 ⋅ 0

设计模式分类与原则

创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(...

晨猫 ⋅ 03/12 ⋅ 0

【软考学习】设计模式——观察者模式

【背景】 设计模式是非常重要的一块知识,每个设计模式都值得深入了解和学习。 【内容】 结构型设计模式总结: 观察者设计模式总结: 一、定义:定义了一种一对多的依赖关系,让多个观察者对...

yym15732626210 ⋅ 01/31 ⋅ 0

Java经典设计模式基础

一、概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理...

Idea ⋅ 01/20 ⋅ 0

你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人 ⋅ 06/02 ⋅ 0

设计模式之修饰器模式详解(附源代码)

装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个...

thorhill ⋅ 03/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

面试-JVM 内存结构

JVM 内存结构

秋日芒草 ⋅ 7分钟前 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 30分钟前 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 今天 ⋅ 0

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 今天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 今天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 今天 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 今天 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部