架构师训练营 第三周 作业
发布于: 2020 年 06 月 24 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
完成情况:DCL双检查锁机制的单例模式(Java)

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

完成情况如下:
1、概念
组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用一致的方法操作单个对象和组合对象。
组合关系与聚合关系的区别:
(1)组合关系:在古代皇帝三宫六院,贵妃很多,但是每一个贵妃只属于皇帝。
(2)聚合关系:一个老师有很多学生,但是每一个学生又属于多个老师。
Container.java
public abstract class Container {    private String name;    private String type;    public Container(String name,String type) {        super();        this.name = name;        this.type=type;    }    public abstract void add(Container form);    public abstract void remove(Container form);    public abstract void display(int depth);    public String getName() {        return name;    }    public void setType(String type) {        this.type = type;    }    public String getType() {        return type;    }    public void setName(String name) {        this.name = name;    }}
Control.java
public class Control extends Container {    public Control(String name,String type) {        super(name,type);    }    @Override    public void add(Container form) {    }    @Override    public void remove(Container form) {    }    @Override    public void display(int depth) {        for (int i = 0; i < depth; i++) {            System.out.print(" ");        }        System.out.println("print "+getType()+ "("+getName()+")");    }}
Frame.java
public class Frame extends Container {    private List<Container> children = new ArrayList<>();    public Frame(String name,String type) {        super(name,type);    }    @Override    public void add(Container form) {        children.add(form);    }    @Override    public void remove(Container form) {        children.remove(form);    }    @Override    public void display(int depth) {        for (int i = 0; i < depth; i++) {            System.out.print(" ");        }        System.out.println("print "+getType()+ "("+getName()+")");        for (Container form : children) {            form.display(depth + 2);        }    }}
Winform.java
public class Winform extends Container {    private List<Container> children = new ArrayList<>();    public Winform(String name,String type) {        super(name,type);    }    @Override    public void add(Container form) {        children.add(form);    }    @Override    public void remove(Container form) {        children.remove(form);    }    @Override    public void display(int depth) {        for (int i = 0; i < depth; i++) {            System.out.print(" ");        }        System.out.println("print "+getType()+ "("+getName()+")");        for (Container container : children) {            container.display(depth + 2);        }    }}
Main.java
public class Main {    public static void main(String[] args) {	// write your code here        Winform winForm = new Winform("Windows窗口","Windows");        Frame frame = new Frame("FRAME1","Frame");                Control lflogo = new Control("LOGO","Picture");        Control lflogin = new Control("登录","Button");        Control lfregister = new Control("注册","Button");        Control cUname = new Control("用户名","Label");        Control cUnameVal = new Control("用户名","TextBox");        Control cPass = new Control("密码","Label");        Control cPassVal = new Control("密码","TextBox");        Control remLabel = new Control("记住用户名","Label");        Control remChkBox = new Control("记住用户名","CheckBox");        Control linkLabel = new Control("忘记密码","LinkLabel");                 winForm.add(lflogo);        winForm.add(lflogin);        winForm.add(lfregister);        winForm.add(frame);        frame.add(cUname);        frame.add(cUnameVal);        frame.add(cPass);        frame.add(cPassVal);        remLabel.add(remChkBox);        frame.add(remLabel);        frame.add(linkLabel);                 winForm.display(0);    }}程序输出如下:
"D:\Program Files\Java\jdk1.8.0_111\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:26376,suspend=y,server=n -javaagent:C:\Users\L\AppData\Local\JetBrains\IntelliJIdea2020.1\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "D:\Program Files\Java\jdk1.8.0_111\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\bcprov-jdk15on-1.54.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\javassist-3.12.0.GA.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\local_policy.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\xom-1.2.10.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_111\jre\lib\rt.jar;D:\WorkSpace\Private\Java\架构练习\dev\out\production\dev;D:\Program Files\ideaIU-2020.1.2.win\lib\idea_rt.jar" com.company.MainConnected to the target VM, address: '127.0.0.1:26376', transport: 'socket'print Windows(Windows窗口)  print Picture(LOGO)  print Button(登录)  print Button(注册)  print Frame(FRAME1)    print Label(用户名)    print TextBox(用户名)    print Label(密码)    print TextBox(密码)    print Label(记住用户名)    print LinkLabel(忘记密码)Disconnected from the target VM, address: '127.0.0.1:26376', transport: 'socket'Process finished with exit code 0
 划线
   评论
  复制
发布于: 2020 年 06 月 24 日 阅读数: 29
极客
  关注 
还未添加个人签名 2018.03.29 加入
还未添加个人简介
 
 
  
  
 
 
 
  
  
  
  
  
  
  
  
    
评论