标签:
组合模式允许将对象组合成树形结构来表示“部分-整体”的层次结构。
今天下起了大雪,小明同学和女神也不打算出去玩了。正巧小刚也没啥事,他们打算一起到小明同学家里斗地主。
小明同学这个屌丝,不会记牌。所以要想在女神面前露脸,我们就得给小明同学来一个好牌。
一手好牌各种各样,我们这里不说什么顺子,连对。我们假定,4个A,4个2。就组成了一副好牌。
那么,如何把牌进行组合,变成一手好牌呢。这个时候就会用到组合模式。
首先创建牌这个抽象类,并且有一个查询现有牌的方法。
然后我们创建A和2,继承这个抽象类,并且实现方法。
public abstract class Card { protected string name; public Card(string strName) { this.name = strName; } public abstract void PlayingCard(); } public class A : Card { public A(string strName) : base(strName) { } public override void PlayingCard() { Console.WriteLine("四个A"); } } public class Two : Card { public Two(string strName) : base(strName) { } public override void PlayingCard() { Console.WriteLine("四个二"); } }
这个类要有抓牌这个方法,并且可以存放抓到的牌,然后继承现有牌的方法。
public class GoodCard : Card { public GoodCard(string strName) : base(strName) { } private IList<Card> cardList = new List<Card>(); public void Add(Card card) { cardList.Add(card); } public override void PlayingCard() { Console.WriteLine("我是" + this.name + "。我现在有"); foreach (Card model in cardList) { model.PlayingCard(); } } }
接下来,我们组合这一切。让小明抓到一手好牌
static void Main(string[] args) { Card cardA = new A(""); Card cardTwo = new Two(""); GoodCard goodCard = new GoodCard("小明"); goodCard.Add(cardA); goodCard.Add(cardTwo); goodCard.PlayingCard(); Console.ReadLine(); }
运行结果
组合模式让你把简单的对象组合成一个复杂的对象,变成树形结构层次。让客户可以以单一的方式进行操作。
常用场景:当有一个结构可以组成树状结构,且需要向客户提供单一操作接口。
选择关键点:对外提供一致操作接口的结构是否可以转化为树状结构。
标签:
原文地址:http://www.cnblogs.com/chenxygx/p/4986683.html