zoukankan      html  css  js  c++  java
  • Design Pattern : Composite Pattern

    一个最简单的组合模式的使用例子 

    1. 问题描述

    计算一个网络中的计算机个数(拓扑结构为树型):

                   

    2. 实现(根据Design Patterns一书)

    using System;
    using System.Text;
    using System.Collections;
    
    abstract class Component
    {
       protected string name;
       public Component(string name) { this.name = name; }
       public abstract void Add(Component com);
       public abstract int  Count();
    }
    
    
    class Composite : Component
    {
        private ArrayList children = new ArrayList();
        public Composite(string name) : base( name ){}
        public override void Add( Component com ) { children.Add( com ); }
        public override int Count()
        {
            int sum = 1;
            foreach(Component com in children)
            {
                sum += com.Count();
            }
            return sum;
        }
    }
    
    class Leaf : Component
    {
        public Leaf(string name) : base (name){ }
        public override void Add( Component com) 
        { 
            Console.WriteLine("Connot add to a leaf");
        }
        public override int  Count(){ return 1; }
    }
    
    class Client
    {
        public static void Main( string[] args)
        {
            Composite root = new Composite("Root");
    
                root.Add( new Leaf("Leaf A"));
                root.Add( new Leaf("Leaf B"));
            
                Composite com = new Composite("Composite X");
    
                    com.Add( new Leaf("Leaf XA"));
                    com.Add( new Leaf("Leaf XB"));
    
            root.Add( com );
            
    
            Console.WriteLine("节点总数:" + root.Count());
            Console.ReadKey();
        }
    }

    3. 问题

    如何将拓扑结构保存在xml文档中,动态加载,计算出结果。

    4. 重点

    • 在于理解该模式的应用类型,树形结构,整体——部分;
    • 关键在于抽象类可以代表 Leaf 和 Composite 去执行他们的方法;
    • 实现时还要考虑安全性,透明性问题。
    • 参与者:Component, Leaf, Composite, Client
  • 相关阅读:
    【题解】【bzoj1819】【JSOI】Word Query电子字典
    【笔记】好背的KMP
    【题解】【bzoj 1503】【NOI2004】郁闷的出纳员
    【题解】【bzoj 2809】【Apio2012】dispatching
    CSP2019游记
    Spring boot starter pom的依赖关系说明
    Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串
    Java Util
    实现Quartz的动态增删改查
    1. Spring boot 之热部署
  • 原文地址:https://www.cnblogs.com/wangshide/p/2508288.html
Copyright © 2011-2022 走看看