.NET实用设计模式:组合模式(Composite)
2005-09-20 08:39
351 查看
.NET实用设计模式:组合模式(Composite)
组合模式(Composite)是一种“结构型”模式(Structural)。结构型模式涉及的对象为两个或两个以上,表示对象之间的活动,与对象的结构有关。先举一个组合模式的小小例子:
public class GameBox
InternetBox的代码:
public class InternetBox
XBox的代码:
public class XBox
public class CSComposite
可以看见,用户只需要了解XBox的接口就可以了。
组合模式的应用例子
组合模式适用于下面这样的情况:两个或者多个类有相似的形式,或者共同代表某个完整的概念,外界的用户也希望他们合而为一,就可以把这几个类“组合”起来,成为一个新的类,用户只需要调用这个新的类就可以了。
下面举一个例子说明Composite模式的一个实际应用。下面的Class视图:
Employee类是AbstractEmployee接口的一个实现
从Employee接口和他的一个实现来看,下面很可能要将这个类型的数据组合成一个树的结构。
Boss类是Employee类的派生,他重载了Employee类的add和getChild方法:
public class Boss:Employee
getChild方法是一个递归调用,如果Child不是Leaf,就继续调用下去。上面几个类表达了一个树的结构,表示出了公司中的领导和雇员的级别关系。
现在我们看一下这个程序需要达到的目标,程序运行后显示下面的界面:
EmpNode类是TreeNode类的子类,他具有TreeNode类的所有特性,同时他也组合了AbstractEmployee类型的特点。这样以来调用者的工作就简化了。下面是Form类的代码片断,我把自动生成的代码省略了一部分:
EmpTree_AfterSelect方法是树图点击节点事件的响应方法,用户点击节点后在文本栏里显示相应的工资。组合模式已经介绍完了,下面的东西和组合模式没有什么关系。
为什么用interface
为什么要在程序中创建雇员的interface呢?我们可以创建一个class Employee,再派生出Boss,一样可以实现上面的功能嘛。
使用interface是为了将画面上的显示程序与后台的业务数据程序分离开。画面的显示程序只需要关心“雇员”提供哪些接口就可以工作了,而不去过问具体的细节,比如工资的计算规则。如果需要对界面类和数据类分别进行单元测试,这样的做法也提供了可能(也就是说,这个程序是可测试的)。测试画面的时候可以在雇员接口上实现一些虚假的雇员类,其中的方法和属性都是为了测试而假造的,这样就可以测试界面的显示是否正确。一般说来程序如果要进行单元测试,应该从设计阶段就考虑程序的“可测试性”,其中重要的一点是:将界面表示与业务逻辑分离开。
相关文章推荐
- .Net设计模式之组合模式(Composite)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 组合模式(composite)-设计模式(八)
- 设计模式之(Composite)组合模式
- [设计模式]_[中级]_[组合模式(Composite)分析与总结]
- 23种设计模式之组合模式(Composite)
- 设计模式(8)-结构型-组合模式(Composite)
- Java设计模式透析之 —— 组合(Composite)
- 设计模式C++描述----11.组合(Composite)模式
- Java设计模式之结构型模式-组合模式(Composite)
- 23种设计模式之组合模式(composite)
- 设计模式之Composite(组合)
- JAVA--组合模式(Composite)--设计模式十一
- 【白话设计模式四】组合模式(Composite)
- 设计模式(七)组合模式Composite(结构型)
- JAVA设计模式十七--Composite(组合模式)
- 组合设计模式(CompositePattern)
- 设计模式(10)-组合模式(Composite)