当前位置: 网学 > 编程文档 > 其他类别 > 正文

从理发店流程抽象设计模式中的组合模式

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/12

运行结果如下:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/65122228313.jpg" />

2.应用组合模式的会员卡消费

那么我们就根据我们会员卡的消费,来模拟一下组合模式的实现吧!let''s go!

首先:

1.我们的部件有,总店,分店,加盟店!

2.我们的部件共有的行为是:刷会员卡

3.部件之间的层次关系,也就是店面的层次关系是,总店下有分店、分店下可以拥有加盟店。

有了我们这几个必要条件后,我的要求就是目前店面搞活动当我在总店刷卡后,就可以累积相当于在所有下级店面刷卡的积分总额,设计的代码如下:

/// <summary> /// 店面类 抽象出来的店面部件

/// </summary>

public abstract class Storefront

{

//店名

protected string storeName = string.Empty;

public string StoreName

{

get

{

return storeName;

}

}

//添加店面

public abstract void Add(Storefront store);

//删除店面

public abstract void Remove(Storefront store);

//定义所有部件公用的行为 刷卡行为

public abstract void PayByCard();

}

public class StoreOrBranch : Storefront

{

//构造函数

public StoreOrBranch() { }

public StoreOrBranch(string storeName)

{

this.storeName = storeName;

}

List<Storefront> myStoreList = new List<Storefront>();

//刷卡消费

public override void PayByCard()

{

Console.WriteLine("店面{0}的积分已累加进该会员卡", storeName);

foreach (Storefront sf in myStoreList)

{

sf.PayByCard();

}

}

//增加店面

public override void Add(Storefront store)

{

myStoreList.Add(store);

}

//解除店面

public override void Remove(Storefront store)

{

myStoreList.Remove(store);

}

}

public class JoinInStore : Storefront

{

//构造函数

public JoinInStore() { }

public JoinInStore(string storeName)

{

this.storeName = storeName;

}

//刷卡消费

public override void PayByCard()

{

Console.WriteLine("店面{0}的积分已累加进该会员卡", storeName);

}

public override void Add(Storefront store)

{

throw new NotImplementedException();

}

public override void Remove(Storefront store)

{

throw new NotImplementedException();

}

}

static void Main(string[] args)

{

StoreOrBranch store = new StoreOrBranch("朝阳总店");

StoreOrBranch brach = new StoreOrBranch("东城分店");

JoinInStore jstore = new JoinInStore("海淀加盟店一");

JoinInStore jstore1 = new JoinInStore("上地加盟店二");

brach.Add(jstore);

brach.Add(jstore1);

store.Add(brach);

store.PayByCard();

}

运行结果如下:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/23122228222.jpg" />

这样在累积所有子店面积分的时候,就不需要去关心子店面的个数了,也不用关系是否是叶子节点还是组合节点了,也就是说不管是总店刷卡,还是加盟店刷卡,都可以正确有效的计算出活动积分。

3.什么情况下使用组合模式

引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

原文链接:http://www.cnblogs.com/doubleliang/archive/2011/12/27/2304104.html

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号