写点什么

架构师训练营第三周作业

发布于: 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
用户名
文本框
密码
密码框
复选框
记住用户名
忘记密码
登录
注册



用户头像

喜欢简洁干净的代码 2018.05.04 加入

使用技术,实现业务。思考业务,创新技术。

评论

发布
暂无评论
架构师训练营第三周作业