今天下班,同事们无聊中又聊到了食堂(怎么写食堂?吃货啊!),办公区离食堂远的同事老阮在大家你一句我一句的诱惑下,终于忍不住了决定不管在远也要找时间去尝尝,但是因为上班不顺路也不是很方便,就委托我们宿舍的老李同志帮忙第二天先去开卡充值,热心肠的老李当然不会拒绝喽。
1、模拟场景
有了这个前奏今天的主题就当然又有了,那么首先我们用代码来实现上面的功能,首先来分析一下上面的场景:
①我们需要对卡片充值,所以需要一个卡片类,代码如下:
- /// <summary> /// 卡片类
- /// </summary>
- public class Card
- {
- //卡片名称
- private string cardName = string.Empty;
- public string CardName
- {
- get
- {
- return cardName;
- }
- set
- {
- cardName = value;
- }
- }
- //构造方法
- public Card() { }
- public Card(string cName)
- {
- cardName = cName;
- }
- }
②接下来就是路远的老阮,他的工卡需要去激活,代码如下:
- /// <summary> /// 老阮
- /// </summary>
- public class MrRuan
- {
- //他有一个工卡
- private Card myCard = new Card("mrRuan");
- public Card MyCard
- {
- get
- {
- return myCard;
- }
- }
- }
③接下来就是激活卡片当然要去柜台了,记得在单例模式中已经将这个柜台类实现了,那么我们就拿来用现成的吧,代码如下:
- /// <summary> /// 柜台类
- /// </summary>
- public sealed class Counter
- {
- //在第一次调用类成员时,初始化唯一实例
- private static readonly Counter instance = new Counter();
- private Counter()
- {
- }
- //返回类型实例属性
- public static Counter Instance
- {
- get
- {
- return instance;
- }
- }
- //激活工卡方法
- public void ActivationCard(Card card)
- {
- //激活工卡的过程
- Console.WriteLine("{0}的工卡激活成功!",card.CardName);
- }
- }
④再就是帮助老软第二天去激活卡片的老李,因为老李需要去激活卡片,所以包含激活卡片的操作,代码如下:
- /// <summary> /// 热心肠的老李
- /// </summary>
- public class MrLi
- {
- //激活工卡方法
- public void ActivationCard(Card card)
- {
- Counter.Instance.ActivationCard(card);
- }
- }
⑤类型都抽象出来之后当然就是第二天去激活卡片啦,主函数调用代码如下:
- static void Main(string[] args)
- {
- //实例化老阮
- MrRuan ruan = new MrRuan();
- //实例化老李
- MrLi li = new MrLi();
- //将卡片给老李,老李负责去激活
- li.ActivationCard(ruan.MyCard);
- }
仔细想了一下,这样一来老李也就成了柜台开卡的代理人了,以后别人也可以委托他去帮忙激活卡片了,这不就是活生生的代理模式吗?
这时你要