写点什么

极客大学 - 架构师培训 -ch3 作业

用户头像
bing5tui3
关注
发布于: 2020 年 11 月 14 日
极客大学 - 架构师培训 -ch3 作业

组件之间的类图设计

代码结构

代表性的类实现代码

  1. Component接口

/**
* 组件接口
*/
public interface Component {
// 渲染
void render();
}
  1. BaseComponent抽象类

public abstract class BaseComponent implements Component {
private String name;
public BaseComponent(String name) {
this.name = name;
}
protected String getName() {
return name;
}
}
  1. BaseContainer抽象类,编排了接口的render()方法

public abstract class BaseContainer extends BaseComponent {
private List<Component> components;
public BaseContainer(String name, List<Component> components) {
super(name);
this.components = CollectionUtils.isEmpty(components) ? Collections.emptyList() : components;
}
public void render() {
renderSelf(); // 先render自己
components.forEach(Component::render); // 再render自己的组件
}
// 由子类实现
protected abstract void renderSelf();
}
  1. WinForm实现类:

public class WinForm extends BaseContainer {
public WinForm(String name, List<Component> components) {
super(name, components);
}
@Override
protected void renderSelf() {
System.out.println("print WinForm(" + getName() + ")");
}
}
  1. TextBox和PasswordBox实现类(继承关系):

public class TextBox extends BaseComponent {
public TextBox(String name) {
super(name);
}
@Override
public void render() {
System.out.println("print TextBox(" + getName() + ")");
}
}
public class PasswordBox extends TextBox {
public PasswordBox(String name) {
super(name);
}
@Override
public void render() {
System.out.println("print PasswordBox(" + getName() + ")");
}
}

结果测试

直接调用WinForm对象的render()方法

public class Application {
public static void main(String[] args) {
createWinForm().render();
}
private static Component createWinForm() {
// 创建WinForm的组件
List<Component> winFormComponents = new ArrayList<>();
winFormComponents.add(new Picture("LOGO图片"));
winFormComponents.add(new Button("登录"));
winFormComponents.add(new Button("注册"));
winFormComponents.add(createFrame());
// 创建WinForm
return new WinForm("WINDOW窗口", winFormComponents);
}
private static Component createFrame() {
// 创建frame组件
List<Component> frameComponents = new ArrayList<>();
frameComponents.add(new Label("用户名"));
frameComponents.add(new TextBox("文本框"));
frameComponents.add(new Label("密码"));
frameComponents.add(new PasswordBox("密码框"));
frameComponents.add(new CheckBox("复选框"));
frameComponents.add(new TextBox("记住用户名"));
frameComponents.add(new LinkLabel("忘记密码"));
// 创建frame
return new Frame("FRAME1", frameComponents);
}
}

输出结果



发布于: 2020 年 11 月 14 日阅读数: 23
用户头像

bing5tui3

关注

还未添加个人签名 2018.09.23 加入

还未添加个人简介

评论

发布
暂无评论
极客大学 - 架构师培训 -ch3 作业