让你一看就明白什么是代理模式--java版本_源码下载

项目结构:

运行效果:

======================================================

代码部分:

======================================================

/Proxy/src/com/b510/proxy/dao/GiveGift.java

 1 /**
 2  * 
 3  */
 4 package com.b510.proxy.dao;
 5 
 6 /**
 7  * 送礼物interface
 8  * @author hongten(hongtenzone@foxmail.com)
 9  * @date 2013-2-16
10  */
11 public interface GiveGift {
12     /**
13      * 送洋娃娃
14      */
15     public void giveDolls();
16     /**
17      * 送鲜花
18      */
19     public void giveFlowers();
20     /**
21      * 送巧克力
22      */
23     public void giveChocolate();
24 }

/Proxy/src/com/b510/proxy/dao/impl/Pursuit.java

 1 /**
 2  * 
 3  */
 4 package com.b510.proxy.dao.impl;
 5 
 6 import com.b510.proxy.dao.GiveGift;
 7 import com.b510.proxy.bean.SchoolGirl;
 8 
 9 /**
10  *追求者
11  * 
12  * @author hongten(hongtenzone@foxmail.com)
13  * @date 2013-2-16
14  */
15 public class Pursuit implements GiveGift {
16 
17     /**
18      * 追求者要追求的对象女生
19      */
20     private SchoolGirl schoolGirl;
21 
22     public Pursuit(SchoolGirl schoolGirl) {
23         this.schoolGirl = schoolGirl;
24     }
25 
26     @Override
27     public void giveChocolate() {
28         System.out.println(schoolGirl.getName() + " give you Chocolate!");
29     }
30 
31     @Override
32     public void giveDolls() {
33         System.out.println(schoolGirl.getName() + " give you Dolls!");
34     }
35 
36     @Override
37     public void giveFlowers() {
38         System.out.println(schoolGirl.getName() + " give you Flowers!");
39     }
40 }

/Proxy/src/com/b510/proxy/dao/impl/Proxy.java

 1 /**
 2  * 
 3  */
 4 package com.b510.proxy.dao.impl;
 5 
 6 import com.b510.proxy.bean.SchoolGirl;
 7 import com.b510.proxy.dao.GiveGift;
 8 
 9 /**
10  * 代理(代理就是真实对象的代表)
11  * @author hongten(hongtenzone@foxmail.com)
12  * @date 2013-2-16
13  */
14 public class Proxy implements GiveGift{
15 
16     /**
17      * 追求者对象
18      */
19     private Pursuit pursuit;
20     
21     public Proxy(SchoolGirl schoolGirl){
22         pursuit = new Pursuit(schoolGirl);
23     }
24     
25     @Override
26     public void giveChocolate() {
27         pursuit.giveChocolate();
28     }
29 
30     @Override
31     public void giveDolls() {
32         pursuit.giveDolls();
33     }
34 
35     @Override
36     public void giveFlowers() {
37         pursuit.giveFlowers();
38     }
39 
40 }

/Proxy/src/com/b510/proxy/bean/SchoolGirl.java

 1 /**
 2  * 
 3  */
 4 package com.b510.proxy.bean;
 5 
 6 /**
 7  * 被追求的女生
 8  * 
 9  * @author hongten(hongtenzone@foxmail.com)
10  * @date 2013-2-16
11  */
12 public class SchoolGirl {
13 
14     /**
15      * 名字
16      */
17     private String name;
18 
19     public String getName() {
20         return name;
21     }
22 
23     public void setName(String name) {
24         this.name = name;
25     }
26 }

/Proxy/src/com/b510/proxy/test/ProxyTest.java

 1 /**
 2  * 
 3  */
 4 package com.b510.proxy.test;
 5 
 6 import com.b510.proxy.bean.SchoolGirl;
 7 import com.b510.proxy.dao.impl.Proxy;
 8 
 9 
10 /**
11  * 为别人做嫁衣  ---- 代理模式 <br>
12  * 一个追求者(Pursuit)喜欢一个名字叫娇娇的女生(SchoolGirl),但是自己又不主动去向人家女生表白<br>
13  * 这个追求者(Pursuit)就想出了一个办法,就是叫一个daili(Proxy)的人向人家女生送东西(give****()方法)<br>
14  * 
15  * 出处:《大话设计模式》 程杰 著
16  * @author hongten(hongtenzone@foxmail.com)
17  * @date 2013-2-16
18  */
19 public class ProxyTest {
20 
21     public static void main(String[] args) {
22         //学校有一个名字叫"娇娇"的女生(SchoolGirl)
23         SchoolGirl schoolGirl = new SchoolGirl();
24         schoolGirl.setName("娇娇");
25         
26         //一个叫(Proxy)daili的男生帮助另一个人追求者(Pursuit)追求这个名叫娇娇的女生
27         Proxy daili = new Proxy(schoolGirl);
28         daili.giveChocolate();
29         daili.giveDolls();
30         daili.giveFlowers();
31         
32     }
33     
34 }

 源码下载:http://files.cnblogs.com/hongten/Proxy.zip

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaQ

写这样的方法让人很反感

写作文要做到段落清晰、每段思路流畅、每段主旨明确,要有一条清晰的线穿插整篇内容,编写程序代码和写作文是一个套路。一个类就像一篇小作文,类的单一职责就是小作文要叙...

3467
来自专栏互扯程序

计算机编码 - 更易懂的打开方式

写在前面 对于计算机编码,记得当年上学学计算机时候肚子都被搞大了,不对,是脑袋被搞大了,后来勉强学会了吧,工作这么多年,真的是忘得一干二净,由于平时工作基本都...

3327
来自专栏狮乐园

多维数组取值问题

给予一个多维数组和一个描述取值路径的一维数组, 通过调用函数f返回取值路径描述的值,如 f([[1, 2], [3, 4], [5, 6]], [0, 0]) ...

1673
来自专栏林德熙的博客

C# Find vs FirstOrDefault

需要知道,两个方法都是 Linq 的方法,使用之前需要引用 Linq 。对于 List 等都是继承可枚举Enumerable这时获取第一个元素可以使用First...

1841
来自专栏北京马哥教育

教程 | 比Python快100倍,利用spaCy和Cython实现高速NLP项目

相关 Jupyter Notebook 地址:https://github.com/huggingface/100-times-faster-nlp

1030
来自专栏微信终端开发团队的专栏

Kotlin-Android的另一番风味

微信 订阅号助手 的Android App项目首次尝试使用Kotlin进行大规模的业务开发(483个Kt文件,3.8W行不包含空行的Kt代码),一开始接触Ko...

9.2K5
来自专栏抠抠空间

python常见模块之time模块

一、模块简介 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按...

3407
来自专栏JadePeng的技术博客

知识图谱学习笔记(1)

RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一个统一的标准,用...

1970
来自专栏机器之心

教程 | 比Python快100倍,利用spaCy和Cython实现高速NLP项目

相关 Jupyter Notebook 地址:https://github.com/huggingface/100-times-faster-nlp

1251
来自专栏工科狗和生物喵

【计算机本科补全计划】指令:计算机的语言(MIPS) Part4

正文之前 这几天陪人玩去了,所以没怎么看书。今早某人回家了。所以我也就可以一个人继续开始在图书馆的浪荡之路了。爽歪歪!!!!而且可以一个人独占温暖的地方,实在...

3556

扫码关注云+社区

领取腾讯云代金券