C# 设计模式 结构型模式 之 组合模式

组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

实例演示了一个组织中员工的层次结构:

namespace 组合模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            CorporateStructure CEO = new CorporateStructure("张三", "CEO", 50000);
            CorporateStructure manager = new CorporateStructure("李四", "manager", 20000);
            CorporateStructure staff1 = new CorporateStructure("王五", "staff", 9000);
            CorporateStructure staff2 = new CorporateStructure("赵六", "staff", 8000);
            CorporateStructure staff3 = new CorporateStructure("田七", "staff", 10000);
            CEO.Add(manager);
            manager.Add(staff1);
            manager.Add(staff2);
            manager.Add(staff3);

            //遍历 公司所有部门 中的人员
            Console.WriteLine(CEO.ToString());
            foreach (CorporateStructure PrintCEO in CEO.GetSubordinates())
            {
                Console.WriteLine(PrintCEO.ToString());
                foreach (CorporateStructure PrintManager in PrintCEO.GetSubordinates())
                {
                    Console.WriteLine(PrintManager.ToString());
                }
            }
        }
    }
    //组合模型类
    public class CorporateStructure
    {
        private string name;
        private string position;
        private int salary;
        private List<CorporateStructure> subordinates;
        public CorporateStructure(string name, string position, int salary)
        {
            this.name = name;
            this.position=position;
            this.salary=salary;
            subordinates = new List<CorporateStructure>();
        }
        public void Add(CorporateStructure corporateStructure)
        {
            subordinates.Add(corporateStructure);
        }
        public void Remove(CorporateStructure corporateStructure)
        {
            subordinates.Remove(corporateStructure);
        }
        public List<CorporateStructure> GetSubordinates()
        {
              return subordinates;
        }
        public override string ToString()
        {
            return $"[CorporateStructure名字为:" + name + "职位:" + position + "工资:" + salary.ToString()+ "]";
        }
    }

}

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

猜你喜欢

转载自blog.csdn.net/q8812345qaz/article/details/127591695
今日推荐