第三周架构课程作业

用户头像
dj_cd
关注
发布于: 2020 年 06 月 24 日

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

答:写了懒汉单例方式,如图:



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



答:在开发过程中,除了组合模式,还综合使用了模板模式,提取基类方法,提取泛型实例化方法,编译测试通过。

a、定义接口 InterfaceControl

package com.cd;
import java.util.List;
public interface InterfaceControl {
/**
* 输出控件信息
*/
void print();
/**
* 返回当前控件名
*
* @return 控件名
*/
String getName();
/**
* 设置当前控件名
*/
void setName(String name);
/**
* 返回子控件清单,不需要子控件时,要重写抛出异常
*
* @return 控件清单
*/
List<InterfaceControl> getSubs();
/**
* 添加子结点,不需要子控件时,要重写抛出异常
*
* @param InterfaceControl 结点
* @return 返回子结点个数
*/
int addSub(InterfaceControl interfaceControl);
}

b、定义基类 BaseControl,抽取出通用模板方法

package com.cd;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseControl implements InterfaceControl {
private List<InterfaceControl> Subs = new ArrayList<>();
private String name;
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public List<InterfaceControl> getSubs() {
return Subs;
}
@Override
public void print() {
System.out.println(String.format("print %s(%s)", this.getClass().getSimpleName(), getName()));
List<InterfaceControl> Subs = getSubs();
if (Subs != null) {
for (InterfaceControl ctl : Subs) {
ctl.print();
}
}
}
@Override
public int addSub(InterfaceControl interfaceControl) {
List<InterfaceControl> Subs = getSubs();
if (Subs == null) {
return 0;
}
if (interfaceControl != null) {
Subs.add(interfaceControl);
}
return Subs.size();
}
}

c、定义9个具体的控件类,都只有类定义,不需要具体代码:

WinForm、Button、CheckBox、Frame、Label、LinkLabel、PassowrdBox、Picture、TextBox

package com.cd;
public class WinForm extends BaseControl {
}
public class Button extends BaseControl {
}
public class CheckBox extends BaseControl {
}
public class Frame extends BaseControl {
}
public class Label extends BaseControl {
}
public class LinkLabel extends BaseControl {
}
public class PassowrdBox extends BaseControl {
}
public class Picture extends BaseControl {
}
public class TextBox extends BaseControl {
}

d、定义完毕,下面是main主调方法:

package com.cd;
public class Main {
public static void main(String[] args) throws IllegalAccessException, InstantiationException {
// 声明主窗体
InterfaceControl mainForm = new WinForm();
mainForm.setName("WINDOW窗口");
// 添加子控件
addSubs(mainForm);
// 绘画整个窗体
mainForm.print();
}
static <T> InterfaceControl createSub(String name, Class<T> clasz) throws IllegalAccessException, InstantiationException {
InterfaceControl Sub = (InterfaceControl) clasz.newInstance();
Sub.setName(name);
return Sub;
}
static void addSubs(InterfaceControl mainForm) throws InstantiationException, IllegalAccessException {
mainForm.addSub(createSub("LOGO图片", Picture.class));
mainForm.addSub(createSub("登录", Button.class));
mainForm.addSub(createSub("注册", Button.class));
InterfaceControl frame = createSub("FRAME1", Frame.class);
mainForm.addSub(frame);
frame.addSub(createSub("用户名", Label.class));
frame.addSub(createSub("文本框", TextBox.class));
frame.addSub(createSub("密码", Label.class));
frame.addSub(createSub("密码框", PasswordBox.class));
frame.addSub(createSub("复选框", CheckBox.class));
frame.addSub(createSub("记住用户名", TextBox.class));
frame.addSub(createSub("忘记密码", LinkLabel.class));
}
}



e、执行结果如下:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=52379:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\work\JavaProject\WinDeom\out\production\WinDeom" cn.beinet.Main
print WinForm(WINDOW窗口)
print Picture(LOGO图片)
print Button(登录)
print Button(注册)
print Frame(FRAME1)
print Label(用户名)
print TextBox(文本框)
print Label(密码)
print PasswordBox(密码框)
print CheckBox(复选框)
print TextBox(记住用户名)
print LinkLabel(忘记密码)

Process finished with exit code 0



用户头像

dj_cd

关注

还未添加个人签名 2019.08.09 加入

还未添加个人简介

评论

发布
暂无评论
第三周架构课程作业