背景
最近彷佛跟红点树杠上了,非要寻找一种相对来说最佳的红点树方案。前面有两篇文章,同样也实现了红点树方案,但是,在我看来,仍然不是最佳方案。经过几天的思索,终于有一个相对来说比较高效的红点树实现方案了。
实现原理
采用数据结构树的思想,叶子结点为驱动,每当叶子结点红点数量更改时,则通知该支树向上结点红点数量更改,采用递归方案。
部分核心代码
// 反向递归向上改变父节点的红点个数[注意:父节点的红点数量由其所有子节点的红点数量构成]
private void ChangeParentPointNum(RedPointNode node)
{
if (node.Id == RedPointNodeID.RootNode)
return;
node = node.ParentNode;
while (node.Id !=RedPointNodeID.RootNode)
{
var count = node.ChildNodeList.Count;
var totalNum = 0;
for (int i = 0; i < count; i++)
{
var childNode = node.ChildNodeList[i];
totalNum += childNode.PointNum;
}
node.ResetPointNum(totalNum);
node.NotifyPointNumChange();
node = node.ParentNode;
}
}
优势
相对与其他方案:代码简洁,通俗易懂,可以快速接入项目。其他同事使用红点只需要简单的注册和监听即可。
(个人感觉:相对与前缀树原理,及事件通知方案,这个实现方案最佳)
演示图片
演示视频
https://live.csdn.net/v/157285
Demo_034下载链接:
https://blog.csdn.net/qq_25122429/article/details/114098885?spm=1001.2014.3001.5501