第三周作业
发布于: 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、运行结果
划线
评论
复制
发布于: 2020 年 06 月 23 日阅读数: 47
CP
关注
还未添加个人签名 2018.03.15 加入
还未添加个人简介
评论