学习C#设计模式(十)代理模式

代理模式

using System;

namespace Proxy
{

    //水果销售者
    public abstract class FruitSeller
    {
        //抽象卖水果方法
        public abstract int Sell(ref int money);
    }

    //果农
    public class Orchardist : FruitSeller
    {
        //卖水果收入:元
        int money = 0;

        int fruit = 100000000;

        //果农卖水果 :5000元/吨
        public override int Sell(ref int money)
        {
            int fruit = money / 5000;//水果卖出的数量
            int price = fruit * 5000;//卖出水果收入
            money -= price;//购买者支出的金额
            this.money +=price ;//果农收入
            this.fruit -= fruit;//果农卖出的水果

            Console.WriteLine("果农卖出{0}吨水果,还剩{1}吨水果,收入{2}元",fruit,this.fruit,price);
            return fruit;
        }
    }

    //水果代理商
    public class FruitAgent : FruitSeller
    {
        int money = 500000;//卖水果收入:元
        int fruit = 0;//水果总量:千克
        FruitSeller orchardist;
        //卖水果:10元/千克
        public override int Sell(ref int money)
        {
            if (orchardist==null) 
            {
                orchardist = new Orchardist();
            }
            int fruit = money / 10;//卖出水果的数量

            //如果水果总量不足,则向果农购买水果
            if (fruit > this.fruit) 
            {
                this.fruit += this.orchardist.Sell(ref this.money) * 1000;
            }
            this.fruit -= fruit;//代理商卖出的水果
            this.money += fruit * 10;//代理商的收入
            money -= fruit * 10;//购买者支出的金额

            Console.WriteLine("代理商卖出水果{0}千克,还剩{1}千克水果,收入{2}元!",fruit ,this.fruit,fruit*10);

            return fruit;//卖出水果的数量
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //创建代理商类
            FruitAgent proxy = new FruitAgent();
            int money = 1234;
            int fruit = proxy.Sell(ref money);//代理商向消费者卖水果

            Console.WriteLine("消费者花费{0}元购买{1}千克水果!", 1234 - money, fruit);


            Console.ReadKey();
        }
    }
}

代码解析:
本实例代码实现了代理模式,代码中创建了抽象水果销售者类FruitSeller及其派生类果农类Orchardist和水果代理商类FruitAgent,其中FruitAgent类就是Orchardist类的代理类。在 FruitAgent类中创建了 Orchardist类的实例,消费者通过 FruitAgent类购买水果,FruitAgent类对 Orchardist类的调用批发水果。而且 FruitAgent类中对 Orchardist类的创建还延迟到了对 Orchardist类调用的时候。在 FruitAgent 中还可以在调用 Orchardist类之前添加一些安全认证代码,或是Orchardist类所依赖的一些初始化工作等。这就是代理模式。

说明:
代理模式的主要功能是为一个类提供一个替换的代理类来实现对其进行访问,通过代理类可以降低类的复杂度,还可以提高类访问时的友好度,增加类的访问安全性,以及在调用者无法直接对类进行调用时使用代理类来建立中间层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值