万网 做网站,平面设计图效果图,卡盟网站建设公司,wordpress主题模版修改目录
组合模式#xff08;Composite Pattern#xff09;
优缺点
使用场景
代码实现 组合模式#xff08;Composite Pattern#xff09; 组合模式#xff08;Composite Pattern#xff09;#xff0c;又叫部分整体模式#xff0c;是用于把一组相似的对象当作一…
目录
组合模式Composite Pattern
优缺点
使用场景
代码实现 组合模式Composite Pattern 组合模式Composite Pattern又叫部分整体模式是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象用来表示部分以及整体层次。它创建了对象组的树形结构创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。组合最主要的功能是在整个树状结构上递归调用方法并对结果进行汇总。 根节点和树枝节点本质上属于同一种数据类型可以作为容器使用而叶子节点与树枝节点在语义上不属于用一种类型。但是在组合模式中会把树枝节点和叶子节点看作属于同一种数据类型用统一接口定义让它们具备一致行为。这样在组合模式中整个树形结构中的对象都属于同一种类型带来的好处就是用户不需要辨别是树枝节点还是叶子节点可以直接进行操作给用户的使用带来极大的便利。
优缺点
1优点
高层模块调用简单。节点自由增加。
2缺点在使用组合模式时其叶子和树枝的声明都是实现类而不是接口违反了依赖倒置原则。
使用场景
部分、整体场景如树形菜单文件、文件夹的管理。
代码实现
package mainimport fmt// 文件系统接口文件和目录都要实现该接口
type FileSystemNode interface {Display(separator string)
}// 文件通用功能
type FileCommonFunc struct {fileName string
}// 设置文件名称
func (f *FileCommonFunc) SetFileName(fileName string) {f.fileName fileName
}// 文件类
type FileNode struct {FileCommonFunc
}// 文件类显示文件内容
func (f *FileNode) Display(separator string) {fmt.Println(separator f.fileName 文件内容为Helloworld)
}// 目录类
type DirectoryNode struct {FileCommonFuncnodes []FileSystemNode
}// 目录类展示文件名
func (d *DirectoryNode) Display(separator string) {fmt.Println(separator d.fileName)for _, node : range d.nodes {node.Display(separator --)}
}// 添加目录或者文件
func (d *DirectoryNode) Add(f FileSystemNode) {d.nodes append(d.nodes, f)
}func main() {dict1 : DirectoryNode{}dict1.SetFileName(时间)file1 : FileNode{}file1.SetFileName(周一)file2 : FileNode{}file2.SetFileName(周二)file3 : FileNode{}file3.SetFileName(周三)dict2 : DirectoryNode{}dict2.SetFileName(会议)file4 : FileNode{}file4.SetFileName(早会)file5 : FileNode{}file5.SetFileName(周会)//组装dict1.Add(file1)dict1.Add(file2)dict1.Add(file3)dict1.Add(dict2)dict2.Add(file4)dict2.Add(file5)// 展示dict1.Display(--)dict2.Display(--)
}