组合模式
Posted 梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合模式相关的知识,希望对你有一定的参考价值。
组合模式就是要解决树形结构的对象,如何构建的问题。
树形结构包括(网站的菜单、公司的组织结构、国务院的组织结构、windows资源管理器所表示的文件与文件夹),这种类型的东西因为有无限的层级,要想表述他根本就不可能。
组合模式就是解决这个问题的。
上代码:(做WINDOWS资源管理器,组合模式就是要将自身作为一个对象属性)
public class myDirectory { public string Name { get; set; } /// <summary> /// 这个是对自身的引用,组合模式就是对自身进行引用,以达到描述一个树的结构 /// </summary> public List<myDirectory> DirectoryList = new List<myDirectory>(); /// <summary> /// 自身的文件 /// </summary> public List<FileInfo> FileList = new List<FileInfo>(); }
用递归思路来查找。构建:
/// <summary> /// 递归算法 /// </summary> /// <param name="direct"></param> /// <param name="FileList"></param> static void GetChildNode(DirectoryInfo direct, myDirectory mydirectory) { var ChildDirectory1 = new myDirectory() { Name = direct.Name, FileList = direct.GetFiles().ToList() }; mydirectory.DirectoryList.Add(ChildDirectory1); foreach (var item in direct.GetDirectories()) { GetChildNode(item, ChildDirectory1); } }
如何使用呢:
static void Main(string[] args) { string path = @"E:\学习\投资分析"; myDirectory mydirectory = new myDirectory(); GetChildNode(new DirectoryInfo(path), mydirectory); // Console.WriteLine("文件数量:{0}个"); string qq = JsonConvert.SerializeObject(mydirectory,Formatting.None); Console.Read(); }
这样可以把整个一个无限层级的对象,表述清楚。这就是组合模式所要解决的问题。
以上是关于组合模式的主要内容,如果未能解决你的问题,请参考以下文章