架构师课程 --week 3-- 课后作业

发布于: 18 小时前
架构师课程 --week 3-- 课后作业

作业一:

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

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

类图

public abstract class Entry //表示一个页面元素的抽象类
{
public abstract string getName();
public abstract string getText();
public void printName()
{
printName("");
}
protected abstract void printName(string prefix);
}

public class Box :Entry //Box类是表示单个控件的类
{
private string name;
private string text;
public Box(string name, string text)
{
this.name = name;
this.text = text;
}
public override string getName()
{
return name;
}
public override string getText()
{
return text;
}
protected override void printName(string prefix)
{
Console.WriteLine("print "+this.name+"("+this.text+")"); //待改进:可以使用Temolate模式将两个子类的输出形式统一固定在父类中
}
}

public class BoxFrame : Entry //BoxFrame类是表示一个控件集合的类
{
private string BoxName;
private string BoxText;
private ArrayList dir = new ArrayList();
public BoxFrame(string BoxName, string BoxText)
{
this.BoxName = BoxName;
this.BoxText = BoxText;
}
public override string getName()
{
return BoxName;
}
public override string getText()
{
return BoxText;
}
public Entry add (Entry entry) //add方法可以用于添加BoxFrame类或是Box类
{
dir.Add(entry);
return this;
}
protected override void printName(string prefix)
{
Console.WriteLine("print " + this.BoxName + "(" + this.BoxText + ")");
IEnumerator ie = dir.GetEnumerator();
while (ie.MoveNext())
{
Entry entry = (Entry)ie.Current;
entry.printName();
}
}
}

static void Main(string[] args)
{
BoxFrame windir = new BoxFrame("WinForm","WINDOW窗口");
BoxFrame fradir = new BoxFrame("frame","FRAME1");
windir.add(new Box("picture", "LoGo图片"));
windir.add(new Box("button", "登录"));
windir.add(new Box("button", "注册"));
windir.add(fradir);
fradir.add(new Box("Lable","用户名"));
fradir.add(new Box("TextBox", "文本框"));
fradir.add(new Box("Lable", "密码"));
fradir.add(new Box("PasswordBox", "密码框"));
fradir.add(new Box("CheckBox", "复选框"));
fradir.add(new Box("TextBox", "记住用户名"));
fradir.add(new Box("LinkLable","忘记密码"));
windir.printName();
Console.ReadLine();
}

学习总结

本周结合案例分析又学习了几种设计方法:

  1. Template Method :

通过一个抽象的父类定义流程框架,在子类中实现具体的处理方法。

关键字:abstract

  1. Factory Method :

把以上流程用于生成实例,即得到Factory Method。

  1. Singleton Method :

在以上生成实例的过程中,通常对应于一个应用场景,我们只需要生成一个实例,Singleton Method可以避免由于重复调用类中的方法而生成的多个相同的实例。

关键字:private,static

  1. Composite Method :

多用于处理树形结构,节点和叶子继承同一个父类实现同一套操作。在主程序中调用父类方法时可以屏蔽子类类型的差异。

关键字:abstract

发布于: 18 小时前 阅读数: 9
用户头像

莫莫大人

关注

还未添加个人签名 2018.07.31 加入

还未添加个人简介

评论

发布
暂无评论
架构师课程 --week 3-- 课后作业