001-单子模式.docx


立即下载 薄情
2024-04-22
ton Person 模式 PersonAsSingle Single 单子
118.2 KB

Singleton——单子模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Groovy的@groovy.lang. Singleton,可以很方便将一个普通类转换成单子模式
class Person{
String id = UUID.randomUUID().toString()
}
@Singleton
class PersonAsSingleton{
String id = UUID.randomUUID().toString()
}
assert new Person().id != new Person().id
//使用了注解@Singleton后,不能再new对象了,只能调用其instance属性
//PersonAsSingleton person = new PersonAsSingleton()
assert PersonAsSingleton.instance.id == PersonAsSingleton.instance.id
分析
@groovy.lang. Singleton有3个属性
lazy 延迟加载,默认false。如果设置为true,那么会在首次访问时,再去加载
strict如果修改构造器(包括无参构造器),必须设置strict=false,否则,会报错。正确示例,如下:
@Singleton(strict=false)
class PersonWithStrict{
String id = UUID.randomUUID().toString()
PersonWithStrict(String name){
println name
}
}
assert PersonWithStrict.instance.id == PersonWithStrict.instance.id
property 实例化对象时调用的属性名称,默认是instance(不建议修改)
问题
单子模式创建的对象是否会被垃圾回收?
如果会被回收,是否可以提前设置失效时间
如果不会被回收,如果长期不使用,是否算是脏数据,应该考虑序列化到硬盘上?在需要时,直接反序列化?而不是长期占用内存?
单子模式仅允许一个实例,是否可以模仿着实现多子模式呢?
很常见,但是从没注意过的双子模式


ton/Person/模式/PersonAsSingle/Single/单子/ ton/Person/模式/PersonAsSingle/Single/单子/
-1 条回复
登录 后才能参与评论
-->