写点什么

架构师训练营第 3 周课后练习

用户头像
菜青虫
关注
发布于: 2020 年 11 月 08 日

请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。


输入结果如下:

print WinForm(WINDOW 窗口)

print Picture(LOGO 图片)

print Button(登录)

print Button(注册)

print Frame(FRAME1)

print Label(用户名)

print TextBox(文本框)

print Label(密码)

print PasswordBox(密码框)

print CheckBox(复选框)

print TextBox(记住用户名)

print LinkLabel(忘记密码)


using System;
namespace Geektime.Composite{ public abstract class Component { public string Name { get; set; } public Component(string name) { this.Name = name; }
public virtual void Print() { Console.WriteLine($"print {this.GetType().Name}({this.Name})"); } } public class Container : Component { public Component[] Children { get; set; } public Container(string name, params Component[] children) : base(name) { this.Children = children; }
public override void Print() { base.Print();
if (this.Children == null) return;
foreach (var child in this.Children) { child.Print(); } } }
public class WinForm : Container { public WinForm(string name, params Component[] children) : base(name, children) { } }
public class Frame : Container { public Frame(string name, params Component[] children) : base(name, children) { } }
public class Picture : Component { public Picture(string name) : base(name) { } }
public class Button : Component { public Button(string name) : base(name) { } }
public class Label : Component { public Label(string name) : base(name) { } }
public class LinkLabel : Component { public LinkLabel(string name) : base(name) { } }
public class TextBox : Component { public TextBox(string name) : base(name) { } }
public class PasswordBox : Component { public PasswordBox(string name) : base(name) { } }
public class CheckBox : Component { public CheckBox(string name) : base(name) { } }

public class Program { public static void Main(string[] args) { var root = new WinForm("WINDOW窗口", new Picture("LOGO图片"), new Button("登录"), new Button("注册"), new Frame("FRAME1", new Label("用户名"), new TextBox("文本框"), new Label("密码"), new PasswordBox("密码框"), new CheckBox("复选框"), new TextBox("记住用户名"), new LinkLabel("忘记密码"))); root.Print(); } }}
复制代码


用户头像

菜青虫

关注

还未添加个人签名 2017.11.20 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
WinForm、Frame的参数表较长,如果更多的时候如何考虑可读性
2020 年 11 月 15 日 19:18
回复
没有更多了
架构师训练营第 3 周课后练习