架构师训练营第 3 周作业
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
单例模式是开发过程中比较常见的模式,主要的实现有:饿汉式、懒汉式和双重加载。一般来说用饿汉式即可,如果需要懒加载则采用懒汉式,考虑到懒汉式的性能问题,可以进一步用双重检查的实现方式。以下是三种方式的实现。
1.1 饿汉式
1.2 懒汉式
1.3 双重检查
注意:这里并不需要 volatile 修饰 Instance,加 volatile 是为了防止指令重排,导致程序获取到未初始化时的实例,在高版本的 JDK 并不存在。
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
2.1 功能分析
设计的类图主要如下:
其中, Component 是组件类,也是组合模式的接口,Control 是组合模式的叶子,Container 是组合模式的节点。考虑到显示方式的可扩展,这里新增了一个 Painter 接口,StdPainter 实现该接口,主要功能是将组件按一定格式(format)输出到控制台。
1.4 总结
平时开发中用饿汉式或者框架(比如 spring)提供的单例即可,没有必要过度设计。
2.2 Java 版
这里采用两种语言来实现,首先是 Java 的
复制代码
运行效果
2.3 Golang 版
复制代码
运行效果:
PS: 在 golang 中,对于类的继承并不完美,集成更多的像是在仅在结构体中包含另外一个结构体。
2.4 总结
组合模式适合用来处理有树状结构的设计。客户端可以一致地处理单个对象和组合对象,简化了客户端处理逻辑;更容易的在组合体内加入新的对象,满足“开闭原则”。
版权声明: 本文为 InfoQ 作者【Season】的原创文章。
原文链接:【http://xie.infoq.cn/article/bafdde32a2d8e735d8495368f】。未经作者许可,禁止转载。
评论