代理模式

来源:互联网 发布:小世界网络与社交 编辑:程序博客网 时间:2024/06/04 18:59

什么是代理模式,我自已看了一些资料后总结了下:就是用类B去代理类A,并由类B(也就是代理类)去控制类A的引用。

代理就像中介,比如你卖房子,中介就像你的代理类,他帮你找到买房的人,而卖房的动作其实是你自已去完成的,而不是中介去干。

但类A和类B要能干相同的事情,也就是说代理类B要知道源对象A能干什么,可以干什么。所以这就要他们都有一个共同的相关联的,就是都从同一个接口派生出来(多态性),

下面来看一个西门庆和潘金莲的例子吧:

 

来看下代码吧:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    // 同种类型的女人
    public interface IKindWoman
    {
        //抛眉眼
        void PaoMeiYan();
        //那什么什么
        void Play();
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    //潘金莲是这类女人,所以继承此接口
    class PanJingLian:IKindWoman
    {
        public void PaoMeiYan()
        {
            Console.WriteLine("潘金莲抛眉眼");
        }

        public void Play()
        {
            Console.WriteLine("潘金莲和西门庆偷情");
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    //定义一个媒婆,媒婆是来代理潘金莲的
    public class MeiPo:IKindWoman
    {
        IKindWoman woman;
        //默认媒婆代理潘金莲
        public MeiPo()
        {
            this.woman = new PanJingLian();
        }

        //媒婆还可以代理别的这一类女人
        public MeiPo(IKindWoman woman)
        {
            this.woman = woman;
        }

        public void PaoMeiYan()
        {
            //当然不是媒婆自已抛,她也一大把年纪了
            woman.PaoMeiYan();
        }

        public void Play()
        {
            //这更不可能是媒婆自己来啊,表面上是她,其实是她代理的人
            woman.Play();
        }
    }
}

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    //定义一个卢俊义的老婆贾氏,因为她也是这一类人
    public class JiaSi:IKindWoman
    {
        public void PaoMeiYan()
        {
            Console.WriteLine("贾氏抛眉眼");
        }

        public void Play()
        {
            Console.WriteLine("贾氏也在和西门庆。。。。也不是什么好鸟!");
        }
    }
}

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    //定义一个西门庆
    class XiMenQing
    {
        static void Main(string[] args)
        {
            //把媒婆叫出来
            MeiPo meipo1 = new MeiPo();

            //表面上是媒婆在做这些,但其实是潘金莲在做,媒婆嘛,怎么可能!!
            meipo1.PaoMeiYan();
            meipo1.Play();

            //媒婆也代理贾氏
            MeiPo meipo2 = new MeiPo(new JiaSi());
            meipo2.Play();
            meipo2.PaoMeiYan();
        }
    }
}

 

 

当然,我也是正在学习,只了解了个大概,没详看,至于代理还分为不同的类型,大家可以在网上看看。。。