1
架构师训练营第 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();
}
}
}
复制代码
划线
评论
复制
发布于: 2020 年 11 月 08 日阅读数: 31
菜青虫
关注
还未添加个人签名 2017.11.20 加入
还未添加个人简介
评论 (1 条评论)