架构师训练营 - 作业 3
1. 手写单例模式
如下图,我常用的2中写法,
上面的是懒汉双重校验锁模式,线程安全的写法。理解起来就是私有化构造函数,在GetInstance方法中放回实例,在方法中先检查实例是否为空,防止线程锁过多的问题,再加个锁,再次检查实例是否为空,防止意外,最后新建实例,返回实例。
下面的是个人认为最简单的方法,就是直接将实例暴露成一个只读属性。
2. 使用组合模式写个Demo
个人理解:组合模式理解起来就是一类可抽象成一个抽象的一组对象的结构组合。
需求:
首先,声明个顶级组件接口 IComponent,只包含打印方法。
然后声明个容器接口IContainer,可以添加子组件,或删除子组件。
声明个抽象类ComponentBase,简化具体子类的操作。
声明box类型抽象类BoxComponent,然后声明具体类型,继承抽象类。
其他直接实现IComonnet的类,如PictureComponent,LableComponent,ButtonComponent类似就不罗列。
然后声明容器类型的组件WinformComponent,
包含私有属性subComponents,表示子组件集合,增加和删除就是针对这个属性操作。
重写Print方法以达到打印所有子组件目的。
最后,实际调用,依次声明组件,并将组件进行组合。
调用打印主组件的打印方法,结果如下
总结
优点:实现组件的解耦,很容易的加入新的组件
缺点:需要理清组件间的关系,依次进行组合
评论