架构师训练营 Week3 - 课后作业
发布于: 2020 年 10 月 04 日
一、手写单例模式
虽然感觉没问题,手写过程中还是出了差错,第一版把单例的目标指向了其他类,并没有起到实质的单例的作用。
第一版
第二版
二、请用组合设计模式编写程序,打印输出图1的窗口,窗口组件的树结构如图2所示。
1. 控制台输出:
2. 接口,类实现
a. Component 接口
package org.architect.eg.window;public interface Component { public void paint(); public void paintSelf(); public void addComponent(Component component);}
b. UIComponent 抽象类
package org.architect.eg.window;import java.util.ArrayList;import java.util.List;public abstract class UIComponent implements Component{ private List<Component> subComponents = new ArrayList<Component>(); private String name; public void addComponent(Component component) { subComponents.add(component); } public void paint() { paintSelf(); paintSubComponent(); } protected void paintSubComponent(){ for (Component component: subComponents) { component.paint(); } } public String getName() { return name; } public void setName(String name) { this.name = name; }}
c. 具体实现类
这里以WinForm类举例,其他组件类实现都类似。区别在于:
类名
构造方法名
paintSelf 打印文字的构造方法名
WinForm 类
package org.architect.eg.window.impl;import org.architect.eg.window.UIComponent;public class WinForm extends UIComponent { public WinForm(String name){ this.setName(name); } public void paintSelf() { System.out.println("print WinForm("+this.getName()+")"); }}
模板:
package org.architect.eg.window.impl;import org.architect.eg.window.UIComponent;public class XXXX extends UIComponent { public XXXX(String name){ this.setName(name); } public void paintSelf() { System.out.println("print XXXX("+this.getName()+")"); }}
d. 测试类
package org.architect.eg;import org.architect.eg.window.Component;import org.architect.eg.window.impl.*;public class TestWindow { public static void main(String[] args) { Component windowForm = new WinForm("WINDOW窗口"); windowForm.addComponent(new Picture("LOGO图片")); windowForm.addComponent(new Button("登录")); windowForm.addComponent(new Button("注册")); Component frame1 = new Frame("FRAME1"); frame1.addComponent(new Label("用户名")); frame1.addComponent(new TextBox("文本框")); frame1.addComponent(new Label("密码")); frame1.addComponent(new PasswordBox("密码框")); frame1.addComponent(new CheckBox("复选框")); frame1.addComponent(new TextBox("记住用户名")); frame1.addComponent(new LinkLabel("忘记密码")); windowForm.addComponent(frame1); windowForm.paint(); }}
划线
评论
复制
发布于: 2020 年 10 月 04 日阅读数: 36
冉
关注
还未添加个人签名 2018.09.18 加入
还未添加个人简介
评论