单例模式和组合模式
单例模式
Singleton 模式保证产生单一实例,就是说一个类只生产一个实例。
使用 singleton 有两种原因:
是因为只有一个实例,可以减少实例频繁创建和销毁代理的系统销毁
是当多个用户使用这个实例的时候,便于进行统一控制
手写单列类如图:
顺便了解一下Spring Singleton Scope 的概念
Only one shared instance of a singleton bean is managed, and all requests for beans with an ID or IDs that match that bean definition result in that one specific bean instance being returned by the Spring container.
To put it another way, when you define a bean definition and it is scoped as a singleton, the Spring IoC container creates exactly one instance of the object defined by that bean definition. This single instance is stored in a cache of such singleton beans, and all subsequent requests and references for that named bean return the cached object. The following image shows how the singleton scope works:
声明为单例的bean的对象只会在Spring 容器中存在一个实例,这个实例被存储在一个单例类的缓存集合中。所以的引用将返回缓存中的对象实例。
Spring’s concept of a singleton bean differs from the singleton pattern as defined in the Gang of Four (GoF) patterns book. The GoF singleton hard-codes the scope of an object such that one and only one instance of a particular class is created per ClassLoader. The scope of the Spring singleton is best described as being per-container and per-bean. This means that, if you define one bean for a particular class in a single Spring container, the Spring container creates one and only one instance of the class defined by that bean definition.
Spring 中的单例的与设计模式中差别指出在于设计模式中的硬编码方式的单例是jvm的ClassLoader层面的。而Spring 中的单例由Spring 容器根据 bean 和class 的声明创建的唯一的一个实例。
组合模式
是一种“对象的结构模型”
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
Java 代码例子
总结
组合模式用处理单个对象的方式处理一组对象,这一组对象以树形结构进行组合。每一个对象中包含一个与自己类型相同的集合。
版权声明: 本文为 InfoQ 作者【王鹏飞】的原创文章。
原文链接:【http://xie.infoq.cn/article/3bfd51d773a06a916b3d3534a】。文章转载请联系作者。
评论