写点什么

架构训练营第三周作业

用户头像
一期一会
关注
发布于: 2020 年 11 月 08 日
架构训练营第三周作业



作业一:

作业内容

请在草稿纸上手写一个单例模式的实现代码。

(拍照提交作业)



解答





作业二:

作业内容

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

图1



图2

打印输出示例参考图3。

图三



解答

这里使用JAVA程序实现。先定义一个通用的接口,如下:

public interface Window{
public void print();
}



然后定义树枝节点(有子节点),实现接口要求的print方法,并调用其子节点的print方法:

public class Component implements Window {
private ArrayList<Window> subComponents = new ArrayList<Window>();
private String name;
private String description;
public Component(String name,String description) {
this.name = name;
this.description = description;
}
// add方法用于添加父子结点关系
public void add(Window component) {
this.subComponents.add(component);
}
public ArrayList<Window> getChild(){
return this.subComponents;
}
public void print(){
System.out.println("print "+this.name + "(" + this.description+")");
for (Window component:this.subComponents) {
component.print();
}
}
}

定义叶子节点,实现print方法:

public class Leaf implements Window {
private String name;
private String description;
public Leaf(String name,String description) {
this.name = name;
this.description = description;
}
public void print(){
System.out.println("print "+this.name + "(" + this.description+")");
}
}

调用代码如下:

public static void main(String[] args) {
// 定义所有节点
Component winForm = new Component("WinForm","WINDOW窗口");
Component frame = new Component("Frame","FRAME1");
Leaf picture = new Leaf("Picture","LOGO图片");
Leaf buttonLogIn = new Leaf("Button","登录");
Leaf buttonRegister = new Leaf("Button","注册");
Leaf lableUserName = new Leaf("Lable","用户名");
Leaf userNameTextbox = new Leaf("TextBox","文本框");
Leaf lablePassword = new Leaf("Lable","密码");
Leaf passowrdTextbox = new Leaf("TextBox","密码框");
Leaf checkBox = new Leaf("CheckBox","复选框");
Leaf lableRemember = new Leaf("Lable","记住用户名");
Leaf link = new Leaf("LinkLable","忘记密码");
// 按照层次关系,把叶子节点放入其父节点
winForm.add(picture);
winForm.add(buttonLogIn);
winForm.add(buttonRegister);
winForm.add(frame);
frame.add(lableUserName);
frame.add(userNameTextbox);
frame.add(lablePassword);
frame.add(passowrdTextbox);
frame.add(checkBox);
frame.add(lableRemember);
frame.add(link);
winForm.print();
}

运行程序,打印结果如下:

打印结果



发布于: 2020 年 11 月 08 日阅读数: 78
用户头像

一期一会

关注

还未添加个人签名 2018.01.08 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
饿汉懒汉标准的实现方式,组合模式层次清晰
2020 年 11 月 15 日 19:23
回复
没有更多了
架构训练营第三周作业