C#面向对象设计模式8:组合模式(Composite)

组合模式,先占位,由于文章太耗时,后面补上。

using System;
using System.Collections.Generic;

namespace SimpleFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            福建省 福建 = new 福建省();
            城市 龙岩 = new 城市();
            区县 连城县 = new 区县();
            区县 上杭县 = new 区县();
            村镇 四堡镇 = new 村镇();
            村镇 北团镇 = new 村镇();
            村镇 新泉镇 = new 村镇();

            福建.添加行政区域(龙岩);
            福建.添加行政区域(龙岩);
            龙岩.添加行政区域(连城县);
            龙岩.添加行政区域(上杭县);
            连城县.添加行政区域(四堡镇);
            连城县.添加行政区域(北团镇);
            上杭县.添加行政区域(新泉镇);

            Console.WriteLine($"福建省的人口统计:{福建.人口()}人");
            Console.WriteLine($"龙岩市的人口统计:{龙岩.人口()}人");
        }
    }

    public interface 行政区域
    {
        int 人口();
    }

    public class 福建省 : 行政区域
    {
        public List<行政区域> 城市列表 { get; } = new List<行政区域>();

        public void 添加行政区域(行政区域 city)
        {
            this.城市列表.Add(city);
        }

        public int 人口()
        {
            int population = 0;
            foreach (var city in this.城市列表)
            {
                population += city.人口();
            }
            return population;
        }
    }

    public class 城市 : 行政区域
    {
        public List<行政区域> 区县列表 { get; } = new List<行政区域>();

        public void 添加行政区域(行政区域 area)
        {
            this.区县列表.Add(area);
        }

        public int 人口()
        {
            int population = 0;
            foreach (var area in this.区县列表)
            {
                population += area.人口();
            }
            return population;
        }
    }

    public class 区县 : 行政区域
    {
        public List<行政区域> 村镇列表 { get; } = new List<行政区域>();

        public void 添加行政区域(行政区域 village)
        {
            this.村镇列表.Add(village);
        }

        public int 人口()
        {
            int population = 0;
            foreach (var city in this.村镇列表)
            {
                population += city.人口();
            }
            return population;
        }
    }

    public class 村镇 : 行政区域
    {
        public int 人口()
        {
            return new Random().Next(1000, 5000);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值