`
wengbo316
  • 浏览: 15021 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

趣谈设计模式(2)-代理模式(转载)

阅读更多

 

什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道

被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被

代理的人能干活呀。

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

先定义一种类型的女人:package com.cbf4life.proxy;

/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
*/
public interface KindWomen {
//这种类型的女人能做什么事情呢?
public void makeEyesWithMan(); //抛媚眼
public void happyWithMan(); //happy what? You know that!
}

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

 

* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 定一个潘金莲是什么样的人
*/
public class PanJinLian implements KindWomen {
public void happyWithMan() {
System.out.println("潘金莲在和男人做那个.....");
}
public void makeEyesWithMan() {
System.out.println("潘金莲抛媚眼");
}
}

 再定一个丑陋的王婆:

package com.cbf4life.proxy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 王婆这个人老聪明了,她太老了,是个男人都看不上,
* 但是她有智慧有经验呀,她作为一类女人的代理!
*/
public class WangPo implements KindWomen {
private KindWomen kindWomen;
public WangPo(){ //默认的话,是潘金莲的代理
this.kindWomen = new PanJinLian();
}
//她可以是KindWomen的任何一个女人的代理,只要你是这一类型
public WangPo(KindWomen kindWomen){
this.kindWomen = kindWomen;
}
public void happyWithMan() {
this.kindWomen.happyWithMan(); //自己老了,干不了,可以让年轻的代替
}
public void makeEyesWithMan() {
this.kindWomen.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!
}
}

 两个女主角都上场了,男主角也该出现了:

package com.cbf4life.proxy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing {
/*
* 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
* 收了不少好处费,那我们假设一下:
* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
*/
public static void main(String[] args) {
//把王婆叫出来
WangPo wangPo = new WangPo();
//然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:
wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲
wangPo.happyWithMan(); }
}
 那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西

门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。

那我们再考虑一下,水浒里还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个固管家苟合

的那个),这名字起的:“假使”,那我们也让王婆做她的代理:

把贾氏素描出来:

package com.cbf4life.proxy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
*/
public class JiaShi implements KindWomen {
public void happyWithMan() {
System.out.println("贾氏正在Happy中......");
}
public void makeEyesWithMan() {
System.out.println("贾氏抛媚眼");
}
}

 西门庆勾贾氏:

package com.cbf4life.proxy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing {
public static void main(String[] args) {
//改编一下历史,贾氏被西门庆勾走:
JiaShi jiaShi = new JiaShi();
WangPo wangPo = new WangPo(jiaShi); //让王婆作为贾氏的代理人
wangPo.makeEyesWithMan();
wangPo.happyWithMan();
}
}
 说完这个故事,那额总结一下,代理模式主要使用了Java 的多态,干活的是被代理类,代理类主要是

接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,

大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。

分享到:
评论

相关推荐

    设计模式趣谈之我之见解

    结构型模式处理类或对象的组合,如适配器模式、装饰器模式、代理模式等;行为型模式则涉及对象间的行为分配,如策略模式、观察者模式、责任链模式等。 二、设计模式的重要性 1. 提高代码复用性:设计模式是经过...

    32种设计模式趣谈.doc

    ### 32种设计模式趣谈 #### 一、创建型模式 1. **Factory (工厂模式)** - **定义**: 工厂模式是一种创建型设计模式,它提供了创建对象的最佳方式。此模式的核心思想是将对象的创建与使用分离,即消费者只需知道...

    关于java23种设计模式的有趣见解

    关于Java23种设计模式的有趣见解,是一个深入浅出探讨设计模式在实际场景中应用的例子集合。设计模式是软件工程中的重要概念,旨在解决软件开发中常见的问题,提高代码的复用性和可维护性。以下是对给定文件中提及的...

    014-趣谈网络协议014-趣谈网络协议

    本讲座“014-趣谈网络协议”旨在深入浅出地探讨这个关键领域,帮助我们理解网络背后的运作机制。 首先,我们要了解网络协议的核心概念。在计算机网络中,数据通信依赖于一系列标准和规范,这就是网络协议。最著名的...

    《电子入门趣谈》第8章-基于Matlab的信号处理GUI制作

    在《电子入门趣谈》第八章中,读者将接触如何利用Matlab进行数字信号处理图形用户界面(GUI)的设计。本章旨在帮助初学者通过实际操作加深对数字信号处理的理解,同时熟悉Matlab这一强大的工具。 ##### 任务要求: ...

    风水趣谈--家庭卧室风水布置六大禁忌.doc

    风水趣谈--家庭卧室风水布置六大禁忌.doc

    《电子入门趣谈》第六章-制作机器人

    ### 《电子入门趣谈》第六章-制作机器人 #### 6.1 浅谈机器人 在本章节中,我们将探讨机器人技术的基础概念,并重点介绍竞赛机器人的制作过程。首先,我们需要澄清一个普遍的认知误区:机器人并非总是拥有科幻电影...

    05-趣谈网络协议.epub

    05-趣谈网络协议

    计算机网络技术基础-趣谈网络协议.md

    计算机网络技术基础-趣谈网络协议.md

    英语词源趣谈-英语学习好帮手

    《英语词源趣谈》这本资料正是为此目的而编撰,它通过趣味性的讲解,使枯燥的词汇学习变得生动有趣。 首先,词源学可以帮助我们理解词汇的形态变化。英语中的许多词汇都源于古英语、拉丁语、希腊语等其他语言,这些...

    三角形趣谈

    三角形趣谈

    数学趣谈 - 陈景润.pdf

    数学科普、陈景润、数论

    趣谈网络协议 pdf .zip

    17P2P协议 18DNS协议 19HTTPDNS 20CDN 21数据中心 23移动网络 24云中网络 25软件定义网络 26云中的网络安全 27云中的网络Qo 28云中网络的隔离GRE、VXLAN 29容器网络 30容器网络之Flannel 31容器网络之Calico 32RPC...

    [详细完整版]趣谈大数据.pdf

    趣谈大数据 一、大数据的初步理解 似乎一夜之间,大数据(Big Data)变成一个IT行业中最时髦的词汇。 首先,大数据不是什么完完全全的新生事物,Google的搜索服务就是一个典型的大数据运用,根据 客户的需求,Google...

    趣谈C语言和JAVA中的++和--

    ### 趣谈C语言和JAVA中的++和-- #### 引言 在计算机编程语言的学习过程中,`++`(自增)和`--`(自减)运算符是非常基础且重要的概念之一。无论是在C语言还是Java语言中,这两种运算符都有着广泛的用途,并且能够...

    趣谈数据结构(五).doc

    《趣谈数据结构(五)》探讨了计算机程序设计中的一个重要算法——递归。递归算法是一种较难理解和掌握的技巧,它通过过程自身调用来实现自我嵌套执行。递归执行的流程可以用图形化的方式来表示,就像图1所示,呈现...

    趣谈Linux操作系统

    Linux操作系统是一种自由、开源的操作系统,它基于Unix系统设计,由林纳斯·托瓦兹在1991年首次发布。Linux操作系统的核心是内核,它负责管理系统的硬件资源,调度进程,以及确保多任务的顺利运行。Linux的开放源码...

    C语言-- 指针经典趣谈

    在编程世界里,C语言以其高效、灵活的特点深受程序员喜爱,而指针是C语言中的一个核心概念,它使得程序能够...通过不断的实践和探索,你会发现指针的妙用无穷,正如标题所言,"C语言-- 指针经典趣谈",乐趣与挑战并存。

    风水趣谈--家庭卧室风水布置六大禁忌.zip

    2. **镜子不宜直照床**:镜子在风水中具有反射作用,若直照床铺,不仅容易造成居住者的惊吓,还可能导致心理压力增加,影响健康。尤其夜间起床时,镜子的反射可能引发恐慌感。 3. **卧室不宜过大或过小**:卧室过大...

    计算机发展史趣谈资料.pdf

    例如要计算1248× 456,可以先画一个矩形,然后把它分成3× 2 个小格子,在小格子边依次写下乘数、被乘数的各位数字,再用对角线把小格子一分为二,分别记录上述各位数字相应乘积的十位数与个位数。 珠算盘的出现 ...

Global site tag (gtag.js) - Google Analytics