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

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

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

今天下班客厅的灯确实亮堂了许多,照照镜子感觉自己一下苍老许多,看来还是灯光暗比较好,看不出来自己的憔悴啊,哈哈,其实还是头发长了,决定出去剪发。

进到美发店,便有热情的服务生招呼,显示洗头,挑选造型师,开始剪发,剪发中被造型师推荐了各种各样的收费项目,我只选择了一样软化头发。完毕之后,看了下单子哇塞、好贵噢,不过造型师给我剪的发型我还是很喜欢的,我决定以后还找他剪,但是又太贵,无奈中,发型师向我推荐了他们的会员卡,全场所有项目均5折,最近因为圣诞节还在搞活动这期间办卡的可享受折上折8.6,我心想那这下就太划算了,而且他们总店,分店都可以用,所以毫不犹豫的办了张会员卡。。。囧。。。。

到家后稍微有点后悔,我竟然一时冲动花了那么多钱办了张剪发的会员卡,不过办也办了,只好自己安慰安慰自己,心想,办了卡可以打折上折,而且那么多分店想去哪家去哪家,顿时心情好为能好一点了,突然间想到了一个模式,跟现在的场景很合适,名字叫《组合模式》,为什么说跟组合模式很相似呢?

先看看组合模式的定义吧,在《大话设计模式一书中》组合模式的定义为:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

那就拿我剪发办卡的事情来分析一下吧。

首先,一张卡可以在总部,分店,加盟店使用,那么总部可以刷卡,分店也可以刷卡,加盟店也可以刷卡,这个属性结构的店面层级关系就明确啦。

那么,总店刷卡消费与分店刷卡消费是一样的道理,那么总店与分店对会员卡的使用也具有一致性。

1.组合模式的例子

组合模式结构图:

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

那么组合模式的实例如下:

//抽象的部件类描述将来所有部件共有的行为

public abstract class Component

{

protected string name;

public string Name

{

get

{

return name;

}

set

{

name = value;

}

}

//添加部件

public abstract void Add(Component component);

//删除部件

public abstract void Remove(Component component);

//遍历所有子部件

public abstract void eachChild();

}

//组合部件类

public class Leaf : Component

{

//叶子节点不具备添加的能力,所以不实现

public override void Add(Component component)

{

throw new NotImplementedException();

}

//叶子节点不具备添加的能力必然也不能删除

public override void Remove(Component component)

{

throw new NotImplementedException();

}

//叶子节点没有子节点所以显示自己的执行结果

public override void eachChild()

{

Console.WriteLine("{0}执行了..",name);

}

}

//组合类

public class Composite : Component

{

//用来保存组合的部件

List<Component> myList = new List<Component>();

//添加节点 添加部件

public override void Add(Component component)

{

myList.Add(component);

}

//删除节点 删除部件

public override void Remove(Component component)

{

myList.Remove(component);

}

//遍历子节点

public override void eachChild()

{

Console.WriteLine("{0}执行了..", name);

foreach (Component c in myList)

{

c.eachChild();

}

}

}

static void Main(string[] args)

{

//构造根节点

Composite rootComponent = new Composite();

rootComponent.Name = "根节点"

//添加两个叶子几点,也就是子部件

Leaf l = new Leaf();

l.Name = "叶子节点一"

Leaf l1 = new Leaf();

l1.Name = "叶子节点二"

rootComponent.Add(l);

rootComponent.Add(l1);

//遍历组合部件

rootComponent.eachChild();

}

网学推荐

免费论文

原创论文

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