using System;
using System.Collections.Generic;
namespace CompositePattern
{
    /// 
    ///     组织架构
    /// 
    public abstract class Organization
    {
        /// 
        ///     成员姓名
        /// 
        public string MemberName { get; set; }
        /// 
        ///     成员职位
        /// 
        public string MemberPosition { get; set; }
        /// 
        ///     直接上级
        /// 
        public Organization ParentNode { get; set; }
        public void Display()
        {
            var basicInfo = string.Format("姓名:{0},职位:{1}", MemberName, MemberPosition);
            var parentInfo = ParentNode == null
                ? ""
                : string.Format(",直接上级:『姓名:{0},职位:{1}』", ParentNode.MemberName, ParentNode.MemberPosition);
            Console.WriteLine(basicInfo + parentInfo);
        }
    }
    /// 
    ///     部门
    /// 
    public class Department : Organization
    {
        private readonly List _organizationInfo = new List();
        public Department(string departmentName, string charge)
        {
            MemberPosition = departmentName;
            MemberName = charge;
        }
        public void Add(Organization org)
        {
            _organizationInfo.Add(org);
            org.ParentNode = this;
        }
        public void Remove(Organization org)
        {
            _organizationInfo.Remove(org);
        }
        public List GetDepartmentMembers()
        {
            return _organizationInfo;
        }
    }
    /// 
    ///     员工
    /// 
    public class Member : Organization
    {
    }
}