架构师训练营第三周作业
发布于: 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 加入
使用技术,实现业务。思考业务,创新技术。
评论