基于C#的设计模式学习之组合模式

该博客介绍了组合模式在统计人口中的应用。通过建立一个树形结构的接口,实现了城市和区域的人口统计。City类代表城市,拥有城市人口统计功能;Region类代表区域,可以包含多个城市并计算区域总人口。此设计模式展示了整体与部分的关系,便于灵活管理和统计行政区域人口。
摘要由CSDN通过智能技术生成

     组合模式是一种结构型模式,是一种将对象组合成树状的层次结构的模式,表示整体与部分的关系。在人口统计中,按照行政区域来统计的,省市县就是典型的树形结构。如下

namespace Designmode.Composite
{
    /// <summary>
    /// 计算人口的接口
    /// </summary>
    public interface ICount
    {
        /// <summary>
        /// 统计人口
        /// </summary>
        /// <returns>总人口</returns>
        int Count();
    }
}
namespace Designmode.Composite
{
    public class City : ICount
    {
        /// <summary>
        /// 城市人口
        /// </summary>
        private int _population = 0;
        /// <summary>
        /// 城市名称
        /// </summary>
        private string _name = "";
        /// <summary>
        /// 构建一个城市类
        /// </summary>
        /// <param name="population"></param>
        public City(int population, string name)
        {
            this._population = population;
            this._name = name;
        }
        /// <summary>
        /// 统计人口
        /// </summary>
        /// <returns></returns>
        public int Count()
        {
            Console.WriteLine($"{this._name}: {this._population}");
            return this._population; 
        }
    }
}
namespace Designmode.Composite
{
    /// <summary>
    /// 区域,包含若干个城市
    /// </summary>
    public  class Region : ICount
    {
        /// <summary>
        /// 区域名称
        /// </summary>
        private string _name;
        /// <summary>
        /// 构造包含若干个城市的区域
        /// </summary>
        /// <param name="name">区域名称</param>
        public Region(string name)
        {
            this._name = name;
        }
        /// <summary>
        /// 区域包含的城市
        /// </summary>
        private List<ICount> _citys = new List<ICount>();
        /// <summary>
        /// 添加城市
        /// </summary>
        /// <param name="city">要添加的城市</param>
        public void Add( ICount city) 
        {
            if (city != null && !_citys.Contains(city))
            {
                _citys.Add(city);
            }
        }
        /// <summary>
        /// 移除城市
        /// </summary>
        /// <param name="city">要移除的城市</param>
        public void Remove(ICount city)
        {
            if (_citys.Contains(city))
            {
                _citys.Remove(city);
            }
        }
        /// <summary>
        /// 统计区域人口
        /// </summary>
        /// <returns>区域人口数</returns>
        public int Count()
        {
            int sum = 0;
            foreach (var city in _citys)
            {
                sum += city.Count();
            }
            Console.WriteLine($"{this._name}: {sum}");
            return sum;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值