文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:46
字数 531
阅读 42
收藏 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
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2
【软考学习】设计模式——状态模式

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

yym15732626210
01/31
0
0
小菜学设计模式——设计模式总结之创建型

1、面向过程与面向对象 1)面向过程通过划分功能模块,通过函数间相互调用来实现,但需求变化时就需要更改函数,而你改动的函数有多少地方在调用她呢?关联多少数据,这是很不容易弄得清楚地...

learn_more
2015/07/05
0
0
JavaScript设计模式入坑

JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...

小小小8021
10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python自然语言处理快速入门2常见的NLP操作

在本章中,我们将讨论我们文本数据进行的一些常见数据预处理操作,以适配典型的机器学习算法,如贝叶斯、决策树,逻辑回归等等。这些算法都只适用于数字向量,而不是文本。 那么我们如何将文...

python测试开发人工智能安全
18分钟前
0
0
OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
35分钟前
9
4
[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
6
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
26
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部