`
yiminghe
  • 浏览: 1460410 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于多继承的树设计

 
阅读更多

分类

 

树是一种常见的 ui 组件,在桌面以及 web 中都经常看到,常见的表现形式有

 

简单树:

 

 

多选树:

 

 

如何设计?

 

针对树的两种主要分类,这次主要讨论 DRY ,怎么能把重复的功能拆成独立的单元而最终又能完美的整合?我的答案是多继承:

 

 

 

组成部分

 

BaseNode : 最基本的树节点,类似 dom 树节点,记录该节点的子节点和父节点,可以添加删除子节点以及特有的选中操作,展开和收缩操作。具体通过onClick来响应用户点击。

 

 

CheckNode: 继承自 BaseNode,但是可以记录更多的选中状态和展现形式:子节点和自身都选中(fullCheck),子节点没有全部选中(partCheck),子节点和自身都没选中(none)。具体通过覆盖 BaseNode 的 onClick 响应用户点击来设置状态.

 

TreeEvtDelegate: 功能类,用于事件代理,可代理树根节点下的所有子节点的事件并在合适的子节点上执行对应的事件处理器

 

TreeStateMgr : 功能类,缓存树根节点的所有子节点,便于快速获取,以及记录树级别的状态:树的当前选择元素集合,树是否显示根节点,...

 

Tree: 简单树,实际上用继承于普通节点的根节点来表示一棵树,只不过它可以代理子节点的事件(具体参考事件代理的好处)以及具备树节点的一些全局状态.

 

CheckTree:同 Tree 类似,只不过它通过继承 CheckTree 可以具备更多的状态。

 

 

最后通过多继承, Tree 以及 CheckTree 的功能完全分散到抽象父类上并可以完全互相共享,树本身只是一个空壳(命名) 而已。

 

 

 

对多继承的想法

 

Tree 包括基础框架以及其他一些组件已经完成不少时间了,但也在一直犹豫,多继承是否合适,是否会加剧复杂化,能否在未来多变的需求下易于维护,但感谢《松本行弘的程序世界》,书中 ruby 发明人详细讨论了多继承,解释了为何动态语言中的 mixin 是一种可控,切实的多继承方式,那么如果再进一步增强对功能类初始化过程的控制,也就具备了更强的表达能力,这很可能就是未来的趋势.

 

 

 

 

 

 

  • 大小: 3.7 KB
  • 大小: 19.6 KB
  • 大小: 7.9 KB
分享到:
评论

相关推荐

    经典的基于RBAC的权限设计

    一般继承允许角色间的多继承,而受限继承则要求角色继承关系形成一棵树。这种继承关系简化了权限的管理和分配。 3. **RBAC2模型**:添加了责任分离(Separation of Duty,SoD)关系,分为静态和动态两种。静态SoD是...

    基于ios的树形邀请控件

    本文将深入探讨如何实现这样一个基于iOS的树形邀请控件,同时关注其设计思路、核心功能以及实际应用。 首先,我们来理解"树形邀请控件"的概念。这是一个用户界面元素,能够以树状结构展示数据,其中每个节点(或...

    WPF元素继承树学习记录

    标题“WPF元素继承树学习记录”指向的是对这一复杂结构的理解和探索,这对于初学者掌握WPF的核心概念至关重要。WPF是.NET Framework的一部分,用于构建桌面应用程序,它提供了丰富的图形、布局、数据绑定等功能。 ...

    树形结构的数据库表Schema设计1

    首先,最基本的树形结构设计是通过`{Node_id, Parent_id}`来描述节点间的继承关系,即每个节点都有一个唯一的ID(Node_id),同时记录其父节点的ID(Parent_id)。这样的设计简单直观,便于理解和实现。但是,这种...

    Qt5类继承关系图解

    Qt的类库基于C++构建,采用面向对象的设计模式,具有严谨的类继承体系。核心类如`QObject`是许多其他类的基础,提供了事件处理、信号与槽机制等关键功能。`QWidget`是所有GUI组件的基础,它继承自`QObject`,并添加...

    基于MFC对话框的树形控件

    2. **设计资源**:在资源编辑器中,为对话框添加一个树形控件(IDC_TREECTRL),并为其指定一个合适的ID。 3. **初始化树形控件**:在对话框的 OnInitDialog() 函数中,我们初始化树形控件,设置其样式,并可以设置...

    一种基于角色等级树的SaaS多租户多域访问控制模型.docx

    3. **权限继承**:通过角色等级树实现权限继承,简化权限设置和管理。 4. **审计与追踪**:记录用户行为,以便在出现问题时进行审查和追溯。 5. **动态更新**:支持权限的动态调整,适应业务变化。 实施RBAC在SaaS...

    基于mfc的分形树生成

    **基于MFC的分形树生成** 在计算机图形学领域,分形(Fractal)是一种具有自相似性质的几何形状,它可以无限重复自身,并在不同尺度上保持相似性。IFS(Iterated Function System,迭代函数系统)是创建分形图像的...

    基于JAVA开发的二叉树课程设计与实现

    在本项目中,“基于JAVA开发的二叉树课程设计与实现”主要涵盖了计算机科学中的数据结构和算法领域,特别是关于二叉树的理论知识、Java编程语言的应用以及软件工程的基本实践。二叉树是一种重要的非线性数据结构,...

    基于wpf的桌面下雪圣诞树程序源码

    【基于WPF的桌面下雪圣诞树程序源码解析】 WPF(Windows Presentation Foundation)是.NET框架中的一个组件,主要用于构建具有丰富用户界面的应用程序。本项目是一个利用C#编程语言和WPF技术实现的桌面应用程序,...

    vc++ MFC 界面设计编程 各种控件设计,包括树控件,视图控件

    VC++ 是一种基于Microsoft Windows平台的C++集成开发环境,它包含了Microsoft Foundation Classes (MFC) 库,这个库为Windows应用程序开发提供了丰富的接口。MFC 是一套面向对象的类库,它使得开发者能够更容易地...

    继承映射的

    通过精心设计的继承映射策略,可以将继承关系树中的每个类对应到数据库的一个表,从而有效管理不同级别的实体属性。 #### 支持多态:实现灵活的数据处理 继承映射的一个显著优势在于其对多态的支持。多态是指同一...

    基于选择排序方法的类模板设计与实现C++课程设计.doc

    本文详细介绍了基于选择排序方法的类模板设计与实现C++课程设计的报告,报告中详细介绍了选择排序法的实现、模板类的设计、简单选择排序、树形选择排序和堆排序的实现,并提供了详细的设计文档和测试结果。

    C#本科毕业设计基于Unity3D引擎的网络角色扮演游戏设计与实现源代码.zip

    2. **C#编程**:C#是Unity3D的主要编程语言,提供了面向对象的特性,如类、接口、继承和多态性。在本项目中,C#用于编写游戏逻辑、控制角色行为、处理用户输入、实现网络同步等。 3. **网络编程**:在网络游戏中,...

    基于ListView的树形菜单-支持节点的增删改

    本教程将深入讲解如何基于ListView创建一个支持节点增删改的树形菜单。 首先,理解树形菜单的基本概念。树形菜单是一种层次结构,每个节点可以有子节点,也可以没有,根节点没有父节点。在ListView中实现这样的结构...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_(0601).rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下为解决常见问题而...

    VCL继承关系全图。类的继承关系图

    它基于面向对象的设计,提供了一套丰富的控件和类,使得开发者可以快速地创建Windows应用程序。VCL的类继承关系图是理解这个库的关键,因为它展示了各个类之间的层次结构和它们的功能。 在VCL中,每个类都有一个...

    基于c++的文件管理系统

    同时,通过继承和多态性,可以设计出层次化的文件和目录类,以便更好地模拟实际的文件系统结构。 六、性能优化 为了提高系统性能,可以采用缓存技术减少磁盘I/O次数,使用预读和延迟写策略提升读写速度。另外,...

    基于C++和MFC开发的五子棋(可用于课程设计,毕业设计等)

    4. 多态性:在人机对战模式中,C++的多态性可以实现不同强度的AI算法,通过接口统一调用。 四、源代码解析 源代码中,关键部分包括棋盘界面的绘制、用户输入的处理、游戏逻辑的实现以及AI算法。这些代码段通常包括...

Global site tag (gtag.js) - Google Analytics