2020-06-20- 第三周作业
1 作业一
请在草稿纸上手写一个单例模式的实现代码



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

图1 窗口图例

图2 窗口组件树结构
答:根据图2的窗口组件树结构可知,共有两种节点:一种是叶子节点,另一种是非叶子节点。其中非叶子节点可以有多个叶子节点,而叶子节点则无任何子节点。故而将这两类节点分别抽象为Container和Component抽象类,且同时实现Graphic接口。而这两个抽象类又派生出各自的子类,比如Container派生出WinForm和Frame子类,Component派生出Label、Button等子类。具体类图如下所示。

以上使用了组合模式,其中Graphic为抽象组件接口,定义了draw方法用于绘制图像;Container为组合对象,定义包含哪些子组件,并实现了draw方法;Component为叶子对象,定义叶子对象,并实现draw方法,且不再包含其他的子节点对象。
程序代码如下所示:
为便于查看,以上派生类中仅列出了WinForm和Button类。程序的执行入口是下面的Main类。经测试,输出与预期相符。
评论