• CSharp设计模式读书笔记(9):组合模式(学习难度:★★★☆☆,使用频率:★★★★☆)


    组合模式(Composite Pattern):

    组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式。

    角色模式与结构:

    组合模式的关键是定义了一个抽象构件类,它既可以代表叶子,又可以代表容器,而客户端针对该抽象构件类进行编程,无须知道它到底表示的是叶子还是容器,可以对其进行统一处理。

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.CompositePattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Component leaf1;
                Component leaf2;
    
                Component composite1;
                Component composite2;
    
                leaf1 = new Leaf();
                leaf2 = new Leaf();
    
                composite1 = new Composite();
                composite2 = new Composite();
    
                composite2.Add(leaf2);
                composite1.Add(composite2);
                composite1.Add(leaf1);
    
                composite1.Operation();
    
                Console.ReadLine();
            }
        }
    
        // 抽象构件
        abstract class Component
        {
            public abstract void Add(Component c);
            public abstract void Remove(Component c);
            public abstract Component GetChild(int i);
            public abstract void Operation();
        }
    
        // 叶子节点
        class Leaf : Component
        {
            public override void Add(Component c)
            {
                // 异常处理或错误提示
            }
    
            public override void Remove(Component c)
            {
                // 异常处理或错误提示
            }
    
            public override Component GetChild(int i)
            {
                // 异常处理或错误提示
                return null;
            }
    
            public override void Operation() // 直接实现叶子节点的业务方法
            {
                Console.WriteLine("Leaf Operation...");
            }
        }
    
        // 非叶子节点
        class Composite : Component
        {
            private List<Component> list = new List<Component>(); // 体现组合模式的地方
    
            public override void Add(Component c)
            {
                list.Add(c);
            }
    
            public override void Remove(Component c)
            {
                list.Remove(c);
            }
    
            public override Component GetChild(int i)
            {
                return (Component)list[i];
            }
    
            public override void Operation()
            {
                foreach (Object obj in list) // 体现组合模式的地方
                {
                    ((Component)obj).Operation(); // 递归实现业务方法
                }
            }
        }
    }
  • 相关阅读:
    redis安装
    redis的使用场景和基本数据类型
    (传输层)tcp协议
    async/await
    Promise对象
    对称加密与非对称加密
    Js遍历数组总结
    HTTPS加密传输过程
    HTML节点操作
    Js的new运算符
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993359.html
Copyright © 2020-2023  润新知