设计模式 -组合模式

1.组合模式定义:

将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性

2.问题引入

  • 总公司需要一套办公管理系统,拥有 人力资源,财务和运营等部门功能。
  • 而总公司下面的华东,华北公司也拥有人力 资源和财务运行等部门。
  • 总部,分部是树形结构的,不可以简单的平行管理

公司组织层级图

如何才能既满足层级管理的要求,又能够实现功能模块代码的复用?

3.问题分析

总公司的组织架构复用于分公司 可以抽象为 整体与部分可以被一致对待的问题

总公司相当于一刻大树,而下属分公司相当于一根树枝,而其下更小的办事处则是树枝的分支。而人力资源部,财务部则是大树上的树叶,也是一颗书的最低层级。树的不同层级都可以拥有叶子节点,因此无论是总公司的人力资源部还是办事处的人力资源部,都是整个树上的一个叶子节点【功能模块的复用】,其区别只在于其属于不同层级的父节点【实现了层级管理】。而组合模式,正是根据这一特性产生的。
在这里插入图片描述

4.代码实现

根节点(抽象类)

abstract class Component
        {
            protected string name;
            public Component(string name)
            {
                this.name = name;
            }
            public abstract void Add(Component c);
            public abstract void Remove(Component c);
            public abstract void Display(int depth);
            
        }

枝节点

  class Composite : Component
        {
            private List<Component> children = new List<Component>();


            public Composite(string name) : base(name) { }

            public override void Add(Component c)
            {
                children.Add(c);
            }

           

            public override void Remove(Component c)
            {
                children.Remove(c);
            }

            public override void Display(int depth)
            {
                Console.WriteLine(new string('-', depth) + name);
                foreach(Component component in children)
                {
                    component.Display(depth + 2);
                }

            }
        }

叶节点

   class Leaf : Component
        {
            public Leaf(string name) : base(name) { }
            public override void Add(Component c)
            {
                Console.WriteLine("不能够添加叶节点");
            }
            public override void Remove(Component c)
            {
                Console.WriteLine("不能够移除叶节点");
            }

            public override void Display(int depth)
            {
                Console.WriteLine(new string('-',depth) + name);
            }

        }

运行效果:
在这里插入图片描述
在这里插入图片描述

5.总结

5.1 何时使用?
  1. 需求中体现了部分与总体的结构关系
  2. 忽略组合对象和单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式

实际上在ASP.Net中,所用的web控件的基类都是System.Web.UI.Contril,而Control基类中就有 Add 和 Remove方法,这就是典型的组合模式的应用。

参考:

  1. 《大话设计模式》 -作者: 程杰 出版年: 2007-12-1 出版社: 清华大学出版社
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值