标签:财务部 lin pre console eof 种类型 https 容器 之间
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
l 意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
l 主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
l 何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
l 如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。
组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。
组合模式(Component)结构图
综上,在上述几种情况下可以考虑使用组合模式来设计系统程序。组合模式关键定义了一个抽象类或者接口,既可以代表元素又可以代表部分整体,而客户端是针对该接口进行编程。
例:公司管理系统
公司管理系统结构图
公司类 抽象类或接口
abstract class Company { protected string name; public Company (string name) { this.Name=name; } public abstract void Add (Company c) ;//增加 public abstract void Remove (Company c) ;//移除 public abstract void Display (int depth) ;//显示 public abstract void LineOfDuty () ;//履行职责 }
具体公司类 实现接口 树枝节点
class ConcreteCompany : Company { private List<Company>children = new List<Company> () ; public ConcreteCompany (string name) :base(name) { } public override void Add (Company c) { children.Add(c); } public override void Remove (Company c) { children.Remove(c); } public override void Display (int dapth) { Console. WriteLine (new String(‘-‘ ,depth) + name) ; foreach (Company component in children) { component.Display (depth + 2) ; } } //履行职责 public override void LineOfDuty () { foreach (Company component in children) { component.LineOfDuty () ; } } }
人力资源部与财务部类 树叶结点
//人力资源部 class HRDepartment : Company { public HRDepartment (string name): base (name) { } public override void Add (Company c) { } public override void Remove (Company c) { } public override void Display ((int dapth) { Console. WriteLine (new String(‘-‘ ,depth) + name) ; } public override void LineOfDuty () { Console. WriteLine (“{0} 员工招聘培训管理”,name) ; } } //财务部 class FinanceDepartment : Company { public FinanceDepartment (string name) : base (name) { } public override void Add (Company c) { } public override void Remove (Company c) { } public override void Display ((int dapth) { Console. WriteLine (new String(‘-‘ ,depth) + name) ; } public override void LineOfDuty () { Console. WriteLine (“{0} 公司财务收支管理”,name) ; } }
组合模式定义了包含人力资源部和财务部这些基本对象和分公司、办事处等组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,这样在客户代码中,任何用到基本对象的地方都可以使用组合对象了。
参考链接:
https://wiki.mbalib.com/wiki/Composite_pattern
https://www.runoob.com/design-pattern/composite-pattern.html
标签:财务部 lin pre console eof 种类型 https 容器 之间
原文地址:https://www.cnblogs.com/wq-7047/p/12658648.html