写点什么

设计模式示例

用户头像
imicode
关注
发布于: 2020 年 06 月 24 日

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


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

  1. 创建一个 Component 抽象类作为所有组件的父类

public abstract class Component {
protected String name;
public Component(String name) { this.name = name; }
public abstract void print();}
复制代码


  1. 创建抽象的 Contain 类作为非叶子节点的中间类,所有非叶子节点都需要继承该类

public abstract class Contain extends Component {
private ArrayList<Component> childComponents = new ArrayList<>();
public Contain(String name) { super(name); }
public void addComponent(Component component) { childComponents.add(component); }
@Override public void print() { for (Component component : childComponents) { component.print(); } }}
复制代码


  1. 实现叶子节点相关类,包括 Picture,Button,Lable,TextBox,PasswordBox,CheckBox,LinkLable 类,代码结构完全一致,内容除输出的名称外完全一致,示例代码如下:

public class Picture extends Component {
public Picture(String name) { super(name); }
@Override public void print() { System.out.printf("print Picture(%s)\n", this.name); }}
复制代码


  1. 实现非叶子节点,包括 WinForm 和 Frame,代码结构完全一致,内容除输出的名称外完全一致,示例代码如下:

public class WinForm extends Contain {
public WinForm(String name) { super(name); }
@Override public void print() { System.out.printf("print WinForm(%s)\n", this.name); super.print(); }}
复制代码


  1. 构建窗口组建树,并对输出内容进行测试。

public class WinTest {
public static void main(String[] args) { // 1. 构建窗口结构 WinForm winForm = new WinForm("WINDOW窗口");
Frame frame1 = new Frame("FRAME1"); winForm.addComponent(new Picture("LOGO图片")); winForm.addComponent(frame1); winForm.addComponent(new Button("登陆")); winForm.addComponent(new Button("注册"));
frame1.addComponent(new Lable("用户名")); frame1.addComponent(new TextBox("文本框")); frame1.addComponent(new Lable("密码")); frame1.addComponent(new PasswordBox("密码框")); frame1.addComponent(new CheckBox("复选框")); frame1.addComponent(new Lable("记住用户名")); frame1.addComponent(new LinkLable("忘记密码"));
// 2. 窗口输出 winForm.print(); }}
复制代码


  1. 测试结果

print WinForm(WINDOW窗口)print Picture(LOGO图片)print Frame(FRAME1)print Lable(用户名)print TestBox(文本框)print Lable(密码)print PasswordBox(密码框)print CheckBox(复选框)print Lable(记住用户名)print LinkLable(忘记密码)print Button(登陆)print Button(注册)
复制代码


测试结果符合预期。


用户头像

imicode

关注

还未添加个人签名 2018.02.05 加入

还未添加个人简介

评论

发布
暂无评论
设计模式示例