zoukankan      html  css  js  c++  java
  • 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(); // 递归实现业务方法
                }
            }
        }
    }
  • 相关阅读:
    多线程《三》进程与线程的区别
    多线程《二》开启线程的两种方式
    多线程《一》线程理论
    多进程《七》生产者消费者模型
    多进程《六》队列
    互斥锁与join
    多进程《五》互斥锁
    多进程《四》守护进程
    再度认识未来——2.11
    开始——2.10
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993359.html
Copyright © 2011-2022 走看看