不朽尸王出装加大牛的组合怎么破、、

C#设计模式(6)
本来是不打算接着学的设计模式的结果看了一下本学期的课本貌似还有几章涉及到设计模式加上好几天没写点啥了就来写点设计模式吧
上回说到换灯泡的故事换完灯泡发现客厅里确实亮了很多于是乎走到镜子面前照了一下镜子自从当了程序员走之后发现自己邋遢了要不出去剪剪头精神一下好吧出去理发
进到美发店便有热情地服务生招呼你先是洗头然后挑选造型师开始剪头剪发中被造型师推荐了各种各样的收费项目我只选择了一样软化头发完毕之后看了一下单子我去咋这么贵不过造型师剪的发型还是很漂亮的我决定以后还找他剪但是又太贵无奈中发型师又推销了他们的会员卡全场所有的项目均折最近因为搞活动办卡还可享受折上折我心想这下挺划算而且他们总店分店都可以使用同一张会员卡所有就办了一张会员卡
回到家就后悔了为啥我一时冲动就花了这么多钱办卡赶快找个理由安慰自己办了卡还享受了折上折而且人家还有分店想去哪家去哪家顿时心情好点了突然我就想起了这其实和组合模式很相似
先看看组合模式的定义吧”将对象组合成树形结构以表示’部分整体’的层次结构组合模式使得用户对单个对象的组合对香港的使用具有一致性”
就拿我办会员卡的案例说一下吧
首先一张卡可以在总部分店加盟店使用那么总部可以刷卡分点可以刷卡加盟店也可以刷卡这个属性结构的店面层级关系就明确了
那么总店刷卡消费与分店刷卡消费是一样的道理那么总店与分店对会员卡的使用也具有一致性
组合模式的案例
(组合模式结构组
using System.Collections.G
using System.L
using System.T
using System.Threading.T
namespace 组合模式
class Program
static void Main(string[] args)
//构造根节点
Component rootComponent = new Composite();
rootComponent.Name = &根节点&;
//添加两个叶子节点,也就是子部件
Leaf l1 = new Leaf();
l1.Name = &叶子节点一&;
Leaf l2 = new Leaf();
l2.Name = &叶子节点二&;
rootComponent.Add(l1);
rootComponent.Add(l2);
//遍历组合部件
rootComponent.eachChild();
Console.ReadLine();
//抽象的部件类描述将来所有部件共有的行为
public abstract class Component
public string Name
set { name = }
//添加部件
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();
根节点执行了..
叶子节点一执行了..
叶子节点二执行了..
应用组合模式的会员卡消费
那么我们就根据我们会员卡的消费来模拟一下组合模式的实现吧
1.我们的部件有总店分店加盟店
2.我们的部件共有的行为是刷会员卡
3.部件之间的层次关系也就是店面的层次关系是总店下有分店分店下可以拥有加盟店
有了我们这几个必要的条件后我的要求就是我在总店消费之后,分店加盟店都知道我消费了.代码如下
using System.Collections.G
using System.L
using System.T
using System.Threading.T
namespace 组合模式实例
class Program
static void Main(string[] args)
StoreOrBranch store = new StoreOrBranch(&章丘总店&);
StoreOrBranch branch = new StoreOrBranch(&北京分店&);
JoinInStore jstore1 = new JoinInStore(&上海加盟店&);
JoinInStore jstore2 = new JoinInStore(&深圳加盟店&);
branch.Add(jstore1);
branch.Add(jstore2);
store.Add(branch);
store.PayByCard();
Console.ReadLine();
/// &summary&
/// 店面类,抽象出来的店面部件
/// &/summary&
public abstract class Storefront
protected string storeName = string.E
public string StoreName
get { return storeN }
set { storeName = }
//添加店面
public abstract void Add(Storefront store);
//删除店面
public abstract void Remove(Storefront store);
//定义所有部件公用的行为:刷卡行为
public abstract void PayByCard();
/// &summary&
/// 总店和分店,因为这两种类型的店面具有的功能一样
/// &/summary&
public class StoreOrBranch : Storefront
//构造函数
public StoreOrBranch() { }
public StoreOrBranch(string storeName)
this.storeName = storeN
List&Storefront& myStoreList = new List&Storefront&();
//刷卡消费
public override void PayByCard()
Console.WriteLine(&店面{0}的积分已累加进该会员卡&,storeName);
Console.WriteLine(myStoreList.Count());
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);
/// &summary&
/// 加盟店
/// &/summary&
public class JoinInStore : Storefront
//构造函数
public JoinInStore() { }
public JoinInStore(string storeName)
this.storeName = storeN
//刷卡消费
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();
通过对运行结果进行分析我们就不用去关心我们具体在哪个店里进行消费了我们的会员卡里的积分都会有效
什么情况下使用组合模式
当发现需求中是体现部分与整体层次结构时以及你希望用户可以忽略组合对象与单个对象的不同统一的使用组合结构中的所有对象时就应该考虑组合模式了
小小的总结一下
设计模式的代码不是重点要张思其思想大家可以看出代码并不是很难把思想弄明白
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:222435次
积分:5982
积分:5982
排名:第3419名
原创:377篇
评论:58条
(2)(11)(1)(15)(31)(15)(14)(8)(3)(13)(3)(13)(101)(57)(67)(3)(14)(12)

我要回帖

更多关于 不朽尸王出装 的文章

 

随机推荐