代理模式(八)

原创
2017/08/15 00:51
阅读数 46

定义:

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

 

核心思想:

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

 

案例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)思想。其实,代理模式多借用,静态函数、静态类与单例一起实现。因为它们调用起来比较方便。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部