当前位置: 首页 > news >正文

甘肃省第八建设集团公司网站wordpress vanilla

甘肃省第八建设集团公司网站,wordpress vanilla,自己做视频网站能赚钱吗,在网站做登记表备案 如果修改Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 文件系统2. 图形界面3. 组织架构 四、代码示例(Go语言)五、…

Golang学习笔记_31——原型模式
Golang学习笔记_32——适配器模式
Golang学习笔记_33——桥接模式


文章目录

    • 一、核心概念
      • 1. 定义
      • 2. 解决的问题
      • 3. 核心角色
      • 4. 类图
    • 二、特点分析
    • 三、适用场景
      • 1. 文件系统
      • 2. 图形界面
      • 3. 组织架构
    • 四、代码示例(Go语言)
    • 五、高级应用
      • 1. 递归统计
      • 2. 组合模式 + 访问者模式
    • 六、与其他模式对比
    • 七、总结


一、核心概念

1. 定义

组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组织成树形结构来表示“部分-整体”的层次关系,使客户端可以统一处理单个对象和组合对象

2. 解决的问题

  • 树形结构表示:需要处理具有层级关系的对象(如文件系统、组织架构)
  • 统一操作接口:消除客户端对叶子节点和组合节点的差异感知
  • 递归遍历需求:需要递归处理嵌套结构(如计算文件夹总大小)

3. 核心角色

  1. Component(抽象组件)
    定义所有对象的通用接口,声明管理子组件的方法(如Add()Remove())和业务方法(如Display()

  2. Leaf(叶子节点)
    树形结构的末端节点,没有子节点,实现具体业务逻辑

  3. Composite(组合节点)
    包含子节点的容器,实现组件接口并管理子组件集合

4. 类图

组合模式类图
示例类图

二、特点分析

优点

  1. 统一接口
    客户端无需区分叶子节点和组合节点,简化调用逻辑

  2. 灵活扩展
    新增组件类型无需修改现有代码,符合开闭原则

  3. 层次清晰
    天然支持树形结构表示,便于处理递归操作

缺点

  1. 设计复杂度高
    需要定义抽象接口并处理递归逻辑,增加实现难度

  2. 类型限制困难
    难以约束容器节点只能包含特定类型子组件

三、适用场景

1. 文件系统

  • 叶子节点:文件
  • 组合节点:文件夹(可包含文件/子文件夹)
  • 操作:递归计算总大小、展示目录结构

2. 图形界面

  • 叶子节点:按钮、文本框
  • 组合节点:面板、窗口
  • 操作:统一渲染、事件处理

3. 组织架构

  • 叶子节点:员工
  • 组合节点:部门
  • 操作:统计总人数、打印层级关系

四、代码示例(Go语言)

package compositedemoimport "fmt"// Component 接口
type Component interface {Display(indent string)
}// Leaf 叶子节点
type File struct {Name string
}func (l *File) Display(indent string) {println(indent + l.Name)
}// Directory 组合节点
type Directory struct {Name      stringComponent []Component
}func (c *Directory) Display(indent string) {println(indent + c.Name)for _, component := range c.Component {component.Display(indent + indent)}
}func (c *Directory) Add(component Component) {c.Component = append(c.Component, component)
}func (c *Directory) Remove(component Component) {for i, v := range c.Component {if v == component {c.Component = append(c.Component[:i], c.Component[i+1:]...)}}
}func test() {root := &Directory{Name: "root"}directory := &Directory{Name: "directory"}file1 := &File{Name: "file1"}file2 := &File{Name: "file2"}root.Add(directory)directory.Add(file1)directory.Add(file2)root.Display("--")fmt.Println("==========================================")directory.Display("**")
}
=== RUN   Test_test
--root
----directory
--------file1
--------file2
==========================================
**directory
****file1
****file2
--- PASS: Test_test (0.00s)
PASS

五、高级应用

1. 递归统计

// 在Component接口添加方法
type FileSystemComponent interface {Size() int
}// File实现
func (f *File) Size() int {return 1024 // 假设固定大小
}// Directory实现
func (d *Directory) Size() int {total := 0for _, child := range d.children {total += child.Size()}return total
}

2. 组合模式 + 访问者模式

通过访问者模式实现更复杂的树形结构操作(如格式转换、权限检查)

六、与其他模式对比

模式核心目标关键区别
装饰器动态添加功能通过嵌套包装扩展功能
适配器接口转换解决接口不兼容问题
迭代器遍历集合元素专注于遍历算法实现

七、总结

组合模式通过树形结构统一接口,有效解决了以下问题:

  1. 层次结构表示:天然适合文件系统、组织架构等场景
  2. 递归操作简化:通过统一接口实现递归遍历
  3. 扩展性提升:新增组件类型不影响现有结构

在Go语言中实现时需注意:

  • 通过接口实现多态特性
  • 使用切片管理子组件集合
  • 谨慎处理叶子节点的无效方法(如Add()
http://www.dtcms.com/a/509728.html

相关文章:

  • 矩阵乘以向量?向量乘以向量?
  • 广州网站建设定制费用有哪些有趣的网站
  • 百度提交入口网站怎么看承德 网站建设
  • 2016网站设计欣赏网络营销与直播电商好就业吗
  • 辽宁网站建设推广哪家便宜惠州seo关键词
  • 网页制作与网站开发 实验报告最新新闻热点事件2023年4月
  • 网站企业备案和个人备案的区别吗设计网站大全湖南岚鸿设计
  • 软件下载网站怎么赚钱企业解决方案工作组
  • 台州建站网站模板.net 网站地图
  • 怎么样从头开始做网站威海哪里可以建设企业网站
  • ASP.NET与网站开发实践教程足球比赛直播中国队
  • 大型网站建设公司 北京asp 做网站的好处
  • 青岛网站建设谁家好一些物联网工程专业好就业吗
  • 南昌网站建设南昌吊车出租网站建设需求书模板
  • 本地安装网站彩票走势图网站建设
  • 南通住房和城乡建设厅网站首页腾讯搜索引擎入口
  • 2017手机网站建设方案杭州专业网站设计策划
  • 怎么自己创立网站网站架设软件
  • wordpress企业网站模板wordpress右侧居中
  • 重庆网站建设夹夹虫负责网站备案号被注销怎么办
  • python做软件的网站南通企业免费建站
  • 关键词整站排名优化焦作关键词优化排名
  • 英文版网站建设方案小程序商城的服务哪家好
  • 云南建设厅官方网站小企业做网站
  • 有效的网站建设公专业商业空间设计公司
  • 网站建设 服务器编写网站方案设计书表格
  • 做房产应看的网站福田做网站
  • 新能源汽车价格趋势麦当劳的网站优化建议
  • 网站建设与管理vs2010安徽科技学院
  • 搭建网站的步骤免费网络电视app