码迷,mamicode.com
首页 > 其他好文 > 详细

结构型模式(四)组合模式

时间:2015-11-22 21:47:31      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

 

一句话的概要

组合模式允许将对象组合成树形结构来表示“部分-整体”的层次结构。

剧情

今天下起了大雪,小明同学和女神也不打算出去玩了。正巧小刚也没啥事,他们打算一起到小明同学家里斗地主。

小明同学这个屌丝,不会记牌。所以要想在女神面前露脸,我们就得给小明同学来一个好牌。

一手好牌各种各样,我们这里不说什么顺子,连对。我们假定,4个A,4个2。就组成了一副好牌。

那么,如何把牌进行组合,变成一手好牌呢。这个时候就会用到组合模式。

任务一:创建A和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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!