写点什么

第 3 周作业

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

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。

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

声明接口,每个组件定义Text和Tag属性,最近递归打印输出如图所示内容。

记事本编辑,大致代码(.net)如下:

public interface IDisposable

{

void Dispose();

}

public class Component : IDisposable

{

...

}

public class Control : Component, IDisposable

{

public string Text{ get; set;}

public string Tag{ get; set;}

public ControlCollection Controls { get; }


...

}

public class WinForm : Control

{

}

public class Picture : Control

{

}

public class Button : Control

{

}

public class Frame : Control

{

}

public class Lable : Control

{

}

public class LinkLabel : Label

{

}

public class TextBox : Control

{

}

public class PasswordBox : Control

{

}

public class CheckBox : Control

{

}

static class Program

{

static void Main()

{

...

Application.Run(new LoginForm());

}

}


public partial class LoginForm : Form

{

private void InitializeComponent()

{

Picture logo = new Picture();

logo.Tag = "LOGO图片";


Button login = new Button();

login.Text = "登录";

login.Tag = "登录";


Button register = new Button();

register.Text = "注册";

register.Tag = "注册";


Frame frame = new Frame();

frame.Text = "Frame1";


Label nameLabel = new Label();

nameLabel.Text = "用户名";

nameLabel.Tag = "用户名";


TextBox nameTextBox = new TextBox();

nameTextBox.Tag = "文本框";


Label passLabel = new Label();

passLabel.Text = "密码";

passLabel.Tag = "密码";


PasswordBox passTextBox = new PasswordBox();

passTextBox.Tag = "密码框";


CheckBox rememberUserName = new CheckBox();

rememberUserName.Tag = "记住用户名";


LinkLabel forgetPass = new LinkLabel();

forgetPass.Tag = "忘记密码";


frame.Controls.Add(nameLabel);

frame.Controls.Add(nameTextBox);

frame.Controls.Add(passLabel);

frame.Controls.Add(passTextBox);

frame.Controls.Add(rememberUserName);

frame.Controls.Add(forgetPass);


this.Controls.Add(logo);

this.Controls.Add(login);

this.Controls.Add(register);

this.Controls.Add(frame);


this.Tag = "WINDOWS窗口";

}


private void PrintControls()

{

PrintControls(this);

}


private void PrintControls(Control control)
{

Console.WriteLine(string.Format("print {0}({1})", control.GetType().Name, control.Tag));

// loop child controls

foreach(Control childControl in control.Controls)

{

PrintControls(childControl);

}

}

}



用户头像

Steven

关注

还未添加个人签名 2008.07.18 加入

还未添加个人简介

评论

发布
暂无评论
第3周作业