C# 程式設計經典300例 實例097 水果的銷售 代理模式
實例097介紹代理模式,用一個類別替換另一個類別。
實例描述
範例以水果銷售為例講解代理模式的使用方法。水果由果農採收之後賣給水果代理商,水果代理商再賣給消費者,水果代理商相當於代理類別。
輸出「果農賣出100噸水果,還剩99999900噸水果,收入500000元!」、「代理商賣出水果123千克,還剩99877千克水果,收入1230元!」、「消費者花費1230元購買123千克水果!」。
實現過程
//水果銷售者
public abstract class FruitSeller
{
public abstract int Sell(ref int money);
}
//果農
public class Orchardist:FruitSeller
{
int money = 0;
int fruit = 100000000;
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 orchardust;
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;
}
}
main函數代碼如下:
FruitAgent proxy = new FruitAgent();
int money = 1234;
int fruit = proxy.Sell(ref money);
Console.WriteLine(“消費者花費{0}元購買{1}千克水果!”,1234 - money, fruit);
代碼解析
代理模式替一個類提供一個替換的代理類來實現對其進行訪問,通過代理類可以降低類的複雜度,還可以提高類訪問時的有好度,增加類的訪問安全性,在使用者無法直接對類進行調用時,使用代理類來建立中間層。
留言
張貼留言