静悄悄中时间飞逝,感叹一句最近TMD真忙真累,好在天生坚强性格阳光,不吹不黑,下面开始讲结构型模式(Structural patterns)的第2篇,Composite Pattern,中文称之为组合或复合模式。
定义:
Composite模式,能够灵活地实现循环、递归、部分-整体类的结构,使外部世界能够以一致的方式处理单体或集合。
解决的问题:
- 就像定义中所提及的那样,如何使客户端能够以一致的方式去访问某个单体或者集合,以使结构更加简洁
- 如何优雅的表达一个树形结构
怎么去解决(包含叶子Leaf的实现方式):
- 通过定义一个接口代表集合与个体所拥有的相同属性与行为,如IComponent
- 通过定义一个类Composite,它继承自IComponent,同时通过组合的方式它拥有一个名称为Components的属性,它代表着一个IComponent集合
- Composite有能力将一个实现了IComponent接口的对象加入到Components中
- 对于Composite的任何请求,都会被重定向到属性Components中的每个个体分别去执行
- 通过定义一个类Leaf,它继承自IComponent,代表着不可再分割的个体
举个栗子,在一个树状结构中,树杆、树枝、树叉皆由Composite来表示,而Leaf代表的是末端的每片树叶。
怎么去解决(进一步抽象):
通过分析我们能够发现在上面的解决方式中,如果有能力分辨一个IComponent是树杆还是树叶,便可以将Composite和Leaf合并为一个类型,于是我们为IComponent引入一个新的属性HasChild,并且给它换一个更贴切的名字INode,如果HasChild为True,则代表它是Composite,反之则代表它是Leaf Continue reading “组合模式 (Composite Pattern)-结构型模式第二篇”