写点什么

架构师 0 期 | 组合模式使用

用户头像
刁架构
关注
发布于: 2020 年 06 月 24 日
架构师 0 期 | 组合模式使用

作业一:

手写单例模式,拍照上传。





作业二:



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



代码实现目录图

定义一个接口

// 所有组件都需要实现该接口,其中定义打印方法
public interface Component {
public void print();
}



实现组件抽象类

// 实现构造方法,传入类的名字
// 重载打印方法,实现打印功能
// 基础抽象类
public abstract class BaseComponent implements Component {
private String name;
public BaseComponent(String name) {
this.name = name;
}
@Override
public void print() {
System.out.println(this.name);
}
}



实现父容器抽象类

// 增加添加组件方法
// 重载打印方法,实现循环打印子类功能
// 容器抽象类
public abstract class Container implements Component {
private List<Component> componentList = new ArrayList<Component>();
private String name = null;
public Container(String name) {
this.name = name;
}
public void addComponent(Component component) {
componentList.add(component);
}
public void print() {
System.out.println(this.name);
componentList.forEach(comp -> comp.print());
}
}



实现子类实现类

// 实现构造方法,传入名字
public class Button extends BaseComponent {
public Button(String name) {
super(name);
}
}



public class CheckBox extends BaseComponent {
public CheckBox(String name) {
super(name);
}
}



public class Label extends BaseComponent {
public Label(String name) {
super(name);
}
}



public class LinkLabel extends BaseComponent {
public LinkLabel(String name) {
super(name);
}
}



public class PasswordBox extends BaseComponent {
public PasswordBox(String name) {
super(name);
}
}



public class Picture extends BaseComponent {
public Picture(String name) {
super(name);
}
}



public class TextBox extends BaseComponent {
public TextBox(String name) {
super(name);
}
}



跟节点,需要继承父容器类

// 根节点
public class WinForm extends Container {
public WinForm(String name) {
super(name);
}
}



public class Frame extends Container {
public Frame(String name) {
super(name);
}
}



测试方法

构造例子中的组件树

import java.awt.*;
public class TestLogin {
public static void main(String[] args) {
//上层
Container loginPage = new WinForm("WinForm(Window窗口)");
loginPage.addComponent(new Picture("Picture(Logo图片)"));
//最下层
loginPage.addComponent(new Button("Button(登录)"));
loginPage.addComponent(new Button("Button(注册)"));
//中层
Frame frame1 = new Frame("Frame(Frame1)");
loginPage.addComponent(frame1);
frame1.addComponent(new Label("Label(用户名)"));
frame1.addComponent(new TextBox("TextBox(文本框)"));
frame1.addComponent(new Label("Label(密码)"));
frame1.addComponent(new PasswordBox("PasswordBox(密码框)"));
frame1.addComponent(new CheckBox("CheckBox(复选框)"));
frame1.addComponent(new TextBox("TextBox(记住用户名)"));
frame1.addComponent(new LinkLabel("LinkLabel(忘记密码)"));
//打印
loginPage.print();
}
}



最终打印结果



发布于: 2020 年 06 月 24 日阅读数: 53
用户头像

刁架构

关注

叫我刁架构 2017.10.25 加入

预备备网红首席架构师,移动端开发者,边缘设计支持者。

评论

发布
暂无评论
架构师 0 期 | 组合模式使用