第三周作业

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

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

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



1、手写单例模式





2、使用组合模式打印窗口控件



首先是总体接口设计图:



核心接口代码:

1、主要接口,三个接口都挺简单

/**
* 窗口元素
**/
public interface Element {
void print();
}



/**
* 容器元素
**/
public interface Container extends Element {
void addElement(Element element);
}



/**
* 控件元素,没有新增方法
**/
public interface Widget extends Element {
}



2、容器类型元素的实现类

/**
* 容器抽象类
**/
public abstract class AbstractContainer implements Container {
private String containText;
private Collection<Element> elements;
public AbstractContainer(String containText) {
this.containText = containText;
}
@Override
public void addElement(Element element) {
if(Objects.isNull(elements)){
elements = new ArrayList<>();
}
if(Objects.nonNull(element)) {
elements.add(element);
}
}
@Override
public void print() {
printSelf();
printSub();
}
public abstract void printSelf();
private void printSub(){
if(Objects.isNull(elements) || elements.isEmpty()){
return;
}
elements.forEach(Element::print);
}
public String getContainText(){
return this.containText;
}
}



/**
* 窗口类
**/
public class WinForm extends AbstractContainer {
private Collection<Element> elements;
public WinForm(String containText) {
super(containText);
}
@Override
public void printSelf() {
System.out.println(super.getContainText());
}
}



/**
* 子容器类
**/
public class Frame extends AbstractContainer {
public Frame(String containText) {
super(containText);
}
@Override
public void printSelf() {
System.out.println(super.getContainText());
}
}



3、控件类型元素的实现类:

只是打印文字,控件实现类里面基本都一样,就指贴了抽象类和按钮控件类,其他的都跟按钮一模一样

/**
* 控件抽象类
**/
public abstract class AbstractWidget implements Widget {
private String widgetText;
public AbstractWidget(String widgetText) {
this.widgetText = widgetText;
}
protected String getWidgetText() {
return this.widgetText;
}
}



/**
* @author: CAIPENG
* @create: 2020-06-21 12:33
**/
public class Button extends AbstractWidget {
public Button(String widgetText) {
super(widgetText);
}
@Override
public void print() {
System.out.println(super.getWidgetText());
}
}



4、登录窗口配置类:

将上述元素组合成一个登录窗口,就简单用一个静态方法实现

/**
* 登录页面配置类
**/
public class LoginFormConfig {
private LoginFormConfig() {
}
public static Element buildForm() {
Container loginWin = new WinForm("WINDOWS窗口");
Container inputFrame = new Frame("FRAME1");
loginWin.addElement(new Picture("LOGO图片"));
loginWin.addElement(new Button("登录"));
loginWin.addElement(new Button("注册"));
loginWin.addElement(inputFrame);
inputFrame.addElement(new Lable("用户名"));
inputFrame.addElement(new TextBox("文本框"));
inputFrame.addElement(new Lable("密码"));
inputFrame.addElement(new PasswordBox("密码框"));
inputFrame.addElement(new CheckBox("复选框"));
inputFrame.addElement(new Lable("记住用户名"));
inputFrame.addElement(new LinkLable("忘记密码"));
return loginWin;
}
}



5、最后是main方法

public class Application {
public static void main(String[] args) {
Element loginForm = LoginFormConfig.buildForm();
loginForm.print();
}
}

6、代码结构

7、运行结果



用户头像

CP

关注

还未添加个人签名 2018.03.15 加入

还未添加个人简介

评论

发布
暂无评论
第三周作业