写点什么

week03

用户头像
SuperLab
关注
发布于: 2020 年 09 月 24 日



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





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





Component 抽象类

public abstract class Component {
private final String name;
private String parentName;

public Component(String name) {
this.name = name;
}

public String getName() {
return this.name;
}

public String getParentName() {
return parentName;
}

public void setParentName(String parentName) {
this.parentName = parentName;
}

public abstract void print();

}



public class ElementComponent extends Component{

public ElementComponent(String name) {
super(name);
}

@Override
public void print() {
System.out.println(getParentName() + " 的叶子节点: " + getName());
}
}



public class ElementContainer extends Component {
private List<Component> subComponentList = new ArrayList<>();

public ElementContainer(String name) {
super(name);
}

public void addElement(Component c) {
c.setParentName(this.getName());
subComponentList.add(c);
}

public List<Component> getSubComponentList() {
return subComponentList;
}

@Override
public void print() {
System.out.println("树枝节点: " + getName());
}
}



public class Client {
private static ElementContainer root;

public static void main(String[] args) {
init();
root.print();
printInfo(root);
}

private static void init() {
// 创建对象
ElementContainer window = new ElementContainer("window窗口");
ElementContainer frame = new ElementContainer("登录Frame");

Component logoPic = new ElementComponent("logo图片");
Component loginButton = new ElementComponent("登录按钮");
Component registerButton = new ElementComponent("注册按钮");

Component usernameLabel = new ElementComponent("用户名label");
Component usernameTextBox = new ElementComponent("用户名文本框");
Component passwordLabel = new ElementComponent("密码label");
Component passwordTextBox = new ElementComponent("密码文本框");
Component rememberPasswordCheckBox = new ElementComponent("是否记住密码复选框");
Component rememberPasswordLabel = new ElementComponent("记住密码label");
Component forgetPasswordLink = new ElementComponent("忘记密码link");

// 组装
window.addElement(logoPic);
window.addElement(frame);
window.addElement(loginButton);
window.addElement(registerButton);

frame.addElement(usernameLabel);
frame.addElement(usernameTextBox);
frame.addElement(passwordLabel);
frame.addElement(passwordTextBox);
frame.addElement(rememberPasswordCheckBox);
frame.addElement(rememberPasswordLabel);
frame.addElement(forgetPasswordLink);

root = window;
}

private static void printInfo(ElementContainer root) {
if (root != null && !root.getSubComponentList().isEmpty()) {
for (Component e : root.getSubComponentList()) {
e.print();
if (e instanceof ElementContainer) {
printInfo((ElementContainer)e);
}
}
}

}
}



打印结果


树枝节点: window窗口
window窗口 的叶子节点: logo图片
树枝节点: 登录Frame
登录Frame 的叶子节点: 用户名label
登录Frame 的叶子节点: 用户名文本框
登录Frame 的叶子节点: 密码label
登录Frame 的叶子节点: 密码文本框
登录Frame 的叶子节点: 是否记住密码复选框
登录Frame 的叶子节点: 记住密码label
登录Frame 的叶子节点: 忘记密码link
window窗口 的叶子节点: 登录按钮
window窗口 的叶子节点: 注册按钮




用户头像

SuperLab

关注

还未添加个人签名 2020.04.01 加入

还未添加个人简介

评论

发布
暂无评论
week03