复合模式


    class GraphicObject
    {
        public virtual string GroupName { get; set; }= "Group";
        public string Color;

        private Lazy> graphicObjects = new Lazy>();
        public List GraphicObjects => graphicObjects.Value;

        public override string ToString()
        {
            var sb = new StringBuilder();
            Print(sb, 0);
            return sb.ToString();
        }

        private void Print(StringBuilder sb, int v)
        {
            sb.AppendLine($"{new string('-', v)} GroupName: {this.GroupName} Color:{Color}");
            foreach (var item in GraphicObjects)
            {
                item.Print(sb, v + 1);
            } 
        }
    }
    class Circle:GraphicObject
    {
        public override string GroupName => "Circle"; 

    }
    class Square: GraphicObject
    {
        public override string GroupName => "Square";
         

    } 
    class Program
    {
        static void Main(string[] args)
        {
            GraphicObject graphic1 = new GraphicObject();
            Circle circle1 = new Circle();
            circle1.Color = "Yellor";
            Circle circle2 = new Circle();
            circle2.Color = "Yellor";
            graphic1.GraphicObjects.Add(circle1);
            graphic1.GraphicObjects.Add(circle2);
            Console.WriteLine("1. "+graphic1.ToString());

            GraphicObject graphic2 = new GraphicObject();
            graphic2.GroupName = "Square";
            Square s1 = new Square();
            s1.Color = "blue";
            Square s2 = new Square();
            s2.Color = "blue";
            graphic2.GraphicObjects.Add(s1);
            graphic2.GraphicObjects.Add(s2);

            Console.WriteLine("2. "+graphic2.ToString()); 


        }
    }