架构师训练营第三周作业
发布于: 2020 年 06 月 24 日

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
单例模式的写法有多种,这次写其中的三种。
饿汉式特点是在程序是在单例类首次被加载到JVM中则被实例化
懒汉式特点是首次使用时被实例化,缺点是需要考虑并发,每次获取单例时,都要加锁
枚举特性是在jdk1.5加入的,使用枚举实现单例类安全性最高,使用反射和反序列化都不能破坏单例的实现
上述三种方式推荐次序依次是:枚举,饿汉式,懒汉式。
饿汉式

懒汉式

枚举式

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

类图设计如下:

基类
package com.zd.compose;package com.zd.compose;/** * @author zhaodeng * @date 2020/06/24 21:50 */public abstract class AbstractFrame {    private String name;    public AbstractFrame(String name) {        this.name = name;    }    public void print() {        System.out.println(name);    }}
节点子类
package com.zd.compose;/** * @author zhaodeng * @date 2020/06/24 21:58 */public class NodeFrame extends AbstractFrame {    public NodeFrame(String name) {        super(name);    }}容器子类
package com.zd.compose;import java.util.ArrayList;import java.util.List;/** * @author zhaodeng * @date 2020/06/24 21:59 */public class ContainerFrame extends AbstractFrame {    private List<AbstractFrame> children;    public ContainerFrame(String name) {        super(name);        children = new ArrayList<>();    }    public void addChild(AbstractFrame child) {        children.add(child);    }    @Override    public void print() {        super.print();        children.forEach(AbstractFrame::print);    }}
客户类
package com.zd.compose;/** * @author zhaodeng * @date 2020/06/24 22:04 */public class Client {    public static void main(String[] args) {        // top level        ContainerFrame window = new ContainerFrame("WINDOW窗口");        // second level        NodeFrame logo = new NodeFrame("LOGO图片");        window.addChild(logo);        // second level        ContainerFrame frame = new ContainerFrame("FRAME1");        window.addChild(frame);        // third level        frame.addChild(new NodeFrame("用户名"));        frame.addChild(new NodeFrame("文本框"));        frame.addChild(new NodeFrame("密码"));        frame.addChild(new NodeFrame("密码框"));        frame.addChild(new NodeFrame("复选框"));        frame.addChild(new NodeFrame("记住用户名"));        frame.addChild(new NodeFrame("忘记密码"));        //  second level        window.addChild(new NodeFrame("登录"));        window.addChild(new NodeFrame("注册"));        window.print();    }}
运行结果
WINDOW窗口LOGO图片FRAME1用户名文本框密码密码框复选框记住用户名忘记密码登录注册
划线
评论
复制
发布于: 2020 年 06 月 24 日阅读数: 50

草原上的奔跑
关注
喜欢简洁干净的代码 2018.05.04 加入
使用技术,实现业务。思考业务,创新技术。











 
    
评论