写点什么

第 3 周 - 课后作业

用户头像
大海
关注
发布于: 2020 年 06 月 23 日

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

在草稿纸上手写双重检查锁实现单例模式。



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





定义一个Module接口



package com.ctec;
public interface Module {
public void print();
}



定义一个含有子组件的抽象类:



package com.ctec;
import java.util.ArrayList;
import java.util.List;
public abstract class CompositeModule implements Module{
private String name;
private List<Module> moduleList = new ArrayList<>();
public CompositeModule(String name) {
this.name = name;
}
public CompositeModule add(Module module) {
moduleList.add(module);
return this;
}
@Override
public void print() {
System.out.println(String.format("print %s", name));
for (Module module : moduleList) {
module.print();
}
}
}



package com.ctec;
public class WindowForm extends CompositeModule {
public WindowForm(String name) {
super(name);
}
}



package com.ctec;
public class Button implements Module {
private String name;
public Button(String name) {
this.name = name;
}
@Override
public void print() {
System.out.println(String.format("print Button(%s)", name));
}
}



package com.ctec;
public class Picture implements Module {
private String path;
public Picture(String path) {
this.path = path;
}
@Override
public void print() {
System.out.println(String.format("print Picture(%s)", path));
}
}



package com.ctec;
public class Frame extends CompositeModule {
public Frame(String name) {
super(name);
}
}



package com.ctec;
public class Label implements Module {
private String text;
public Label(String text) {
this.text = text;
}
@Override
public void print() {
System.out.println(String.format("print Label(%s)", text));
}
}



package com.ctec;
public class TextBox implements Module {
private String placeHolder;
public TextBox(String placeHolder) {
this.placeHolder = placeHolder;
}
@Override
public void print() {
System.out.println(String.format("print TextBox(%s)", placeHolder));
}
}



package com.ctec;
public class PasswordBox implements Module {
private String placeHolder;
public PasswordBox(String placeHolder) {
this.placeHolder = placeHolder;
}
@Override
public void print() {
System.out.println(String.format("print TextBox(%s)", placeHolder));
}
}



package com.ctec;
public class LinkLabel implements Module {
private String text;
public LinkLabel(String text) {
this.text = text;
}
@Override
public void print() {
System.out.println(String.format("print LinkLabel(%s)", text));
}
}



package com.ctec;
public class CheckBox implements Module {
@Override
public void print() {
System.out.println("print CheckBox(复选框)");
}
}



测试类



package com.ctec;
import org.junit.Test;
import static org.junit.Assert.*;
public class ModuleTest {
@Test
public void print() {
CompositeModule winForm = new WindowForm("WinForm(WINDOW窗口)");
Module picture = new Picture("LOGO图片");
Module loginButton = new Button("登录");
Module registerButton = new Button("注册");
CompositeModule frame = new Frame("Frame(FRAME1)");
Module usernameLabel = new Label("用户名");
Module usernameTextBox = new TextBox("请输入用户名");
Module passwordLabel = new Label("密码");
Module passwordBox = new PasswordBox("请输入密码");
Module checkbox = new CheckBox();
Module rememberTextBox = new TextBox("记住用户名");
Module linkLabel = new LinkLabel("忘记密码");
frame.add(usernameLabel).add(usernameTextBox).add(passwordLabel).add(passwordBox).add(checkbox).add(rememberTextBox).add(linkLabel);
winForm.add(picture).add(loginButton).add(registerButton).add(frame).print();
}
}



测试输出结果



print WinForm(WINDOW窗口)
print Picture(LOGO图片)
print Button(登录)
print Button(注册)
print Frame(FRAME1)
print Label(用户名)
print TextBox(请输入用户名)
print Label(密码)
print TextBox(请输入密码)
print CheckBox(复选框)
print TextBox(记住用户名)
print LinkLabel(忘记密码)



用户头像

大海

关注

还未添加个人签名 2018.07.14 加入

还未添加个人简介

评论

发布
暂无评论
第 3 周 - 课后作业