代理模式

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

namespace 代理模式
{

    //追求者的方法
    public interface GiveGift {       //这里运用的接口 ,也可以运用抽象类
        void GiveDoll();
        void GiveFlowers();
        void GiveChocolate();
    }
    public class Pursuit :GiveGift
    {
        SchoolGirl mm;

        public Pursuit(SchoolGirl mm)
        {
            this.mm = mm;
        }

        public void GiveDolls()
        {
            Console.WriteLine(mm.Name +"送你洋娃娃");
        }

        public void GiveFlowers()
        {
            Console.WriteLine(mm.Name + "送你鲜花");
        }

        public void GiveChocolate()
        {
            Console.WriteLine(mm.Name +"送你巧克力");
        }
    }   //追求者

    public class Proxy : GiveGift       //代理者
    {
        Pursuit gg;

        public Proxy(SchoolGirl mm)
        {
            gg = new Pursuit(mm);
        }

        public void GiveDolls()
        {
            gg.GiveDolls();
        }

        public void GiveFlowers()
        {
            gg.GiveFlowers();
            gg.GiveChocolate();
        }

        public void GiveChocolate()
        {

            gg.GiveChocolate();
        }
    }

    //被追求者类
    public class SchoolGirl
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            SchoolGirl jiaojiao = new SchoolGirl();

            jiaojiao.Name = "李娇娇";

            Proxy daili = new Proxy(jiaojiao);

            daili.GiveDolls();
            daili.GiveFlowers();
            daili.GiveChocolate();
            Console.ReadKey();
        }
    }
}

 Proxy(代理者)  Pursuit(追求者) ,

  理解:  追求者 想去送鲜花,想去送洋娃娃,想去送巧克力 

    public class Pursuit
    {
        SchoolGirl mm;

        public Pursuit(SchoolGirl mm)
        {
            this.mm = mm;
        }

        public void GiveDolls()
        {
            Console.WriteLine(mm.Name +"送你洋娃娃");
        }

        public void GiveFlowers()
        {
            Console.WriteLine(mm.Name + "送你鲜花");
        }

        public void GiveChocolate()
        {
            Console.WriteLine(mm.Name +"送你巧克力");
        }
    }

  可在对其进行实例化调用时候,发现  追求者 与被追求者,有直接的接触 ,明显不符合要求 ;

 Pursuit zhuojiayi = new Pursuit(jiaojiao);

  追求者需要把 送花 ,送洋娃娃,送巧克力的意思,告诉,代理人(代理人,也可以具有,送花,送洋娃娃,送巧克力的方法,但 是,代理人,是帮追求送,肯定需要实现代追求者的 送 ......) 

  (追求者,与代理人,都具有送花,送洋娃娃,送巧克力的技能,这里,理所当然,就运用了接口,或者抽象类)

  在代理人的类中,实例化 追求者,然后,继承接口或者抽象类后,在实现接口或者抽象类的方法中,对应调用 已实例化的追求者的方法:

  

public class Proxy : GiveGift       //代理者
    {
        Pursuit gg;

        public Proxy(SchoolGirl mm)
        {
            gg = new Pursuit(mm);
        }

        public void GiveDolls()
        {
            gg.GiveDolls();
        }

        public void GiveFlowers()
        {
            gg.GiveFlowers();
            gg.GiveChocolate();
        }

        public void GiveChocolate()
        {

            gg.GiveChocolate();
        }
    }
原文地址:https://www.cnblogs.com/zychengzhiit1/p/4554305.html