文档章节

代理模式(八)

NickHomeSelf
 NickHomeSelf
发布于 2017/08/15 00:51
字数 566
阅读 9
收藏 0

定义:

    在面向对象的系统中,有些对象由于某种原因(比如创建对象开销很大、或某些操作不安全),直接使用会给使用者或者系统结构带来很多麻烦。这样我们在不失去透明操作对象的同时来管理、控制这些对象特有的复杂性,增加一层间接层是软件开发常见的解决方式。

 

核心思想:

    增加一个中间层,使用中间层间接控制。

 

案例1:

    讨债案例,鉴于整个社会的风气,欠钱的是大爷。借钱容易,要钱难。以此为案例,当我们自己要债的时候,经常要不回来。这个时候我们需要一个代理,即:讨债公司。这样就容易把钱要回来了。讨债公司即proxy.代理;在此我呼吁社会人群,少一些套路,多一些真诚。以下为代码

 

interface subjectBase//创建一个接口,用于一个行为,讨债
    {
        void Dun();//讨债函数
        
    }

 public class subjectPerson : subjectBase//这个基于讨债接口,真是的债权人。债权人讨债真的太难了,所以我们使用代理类
    {
        public void Dun()//真是债权人讨债
        {
            Console.WriteLine("直接讨债人:欠钱的大爷,快把钱还了吧!");
        }

        public void Pay()//使用代理讨债需要债权人付出一些费用
        {
            Console.WriteLine("唉,找讨债公司需要付给一些费用..");
        }
    }


 public class subjectCompany : subjectBase//讨债公司基于讨债接口的讨债行为,即代理人
    {
        subjectPerson person = new subjectPerson();//创建一个真是债券人,讨债公司要根据债权人进行讨债
        public void Dun()
        {
            this.person.Dun();//给讨债公司进行协议
            this.person.Pay();//付给讨债公司报酬
            Console.WriteLine("讨债公司:不还钱,在你家泼油漆");//讨债公司进行讨债
            Console.WriteLine("完成讨债....");//讨债完成
        }
    }


==========================================讨债测试========================================


 static void Main(string[] args)
        {
            subjectBase subject = new subjectPerson();
            (subject as subjectPerson).Dun();
            Console.WriteLine();
            subjectBase subjectcompany = new subjectCompany();
            (subjectcompany as subjectCompany).Dun();

            Console.ReadKey();
        }


 

总结:这里的代理只是一个小的案例,也许不是特别合适。但是它体现了代理(Proxy)思想。其实,代理模式多借用,静态函数、静态类与单例一起实现。因为它们调用起来比较方便。

© 著作权归作者所有

上一篇: 适配器模式
NickHomeSelf
粉丝 0
博文 64
码字总数 19755
作品 0
私信 提问
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
279
0
EasyToLearnDesignPattern

简单上手设计模式 GITHUB:https://github.com/Fisher-Joe/EasyToLearnDesignPattern 本文旨在使用最简单的语言,最简单的代码让人学习设计模式(最起码是我) 说明: 本文的所有内容都是基于...

芝麻开门
04/19
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
155
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.5K
69

没有更多内容

加载失败,请刷新页面

加载更多

RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
36分钟前
5
0
正则表达式大全

检验手机号码 # 要求:手机号码必须为11位数字,以1开头,第二位为1或5或8。import redef verify_mobile(): mob = input("请输入手机号码:") ret = re.match(r"1[358]\d{9}", m......

彩色泡泡糖
40分钟前
5
0
QT之border-image属性

一、border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人。可惜目前支持的浏览器有限,仅Firefox3.5,chrome浏览器,Safari3+支持...

shzwork
41分钟前
6
0
Kubernetes Operator简易教程

1. 安装operator-sdk //安装 operator-sdk$ apt-get install operator-sdk.....$ operator-sdk versionoperator-sdk version: v0.7.0$ go versiongo version go1.11.4 darwin/amd64 2......

Robotcl_Blog
41分钟前
5
0
再谈DAG任务分解和Shuffle RDD

1、DagScheduler分析 DagScheduler功能主要是负责RDD的各个stage的分解和任务提交。Stage分解是从触发任务调度过程的finalStage开始倒推寻找父stage,如果父stage没有提交任务则循环提交缺失...

守望者之父
47分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部