知识卡片
单来源调用限定对象只能由指定工厂创建
内容
事件触发框架用到一个不属于GoF模式的实用技巧:”单来源调用”——对象只能 由固定另一对象创建。Product构造函数强制传入ProductManager,检查权限 标志是否为true,该标志只在createProduct()内部设为true,外部new出的Manager权限 标志仍为false。发散:这把”谁有权创建”下沉到构造函数本身,常见于单例和工厂方法模式 内部,用于生命周期一致的组合关系场景。
参考来源
- 位置:《设计模式之禅(第2版)》第36章《观察者模式+中介者模式》36.1节(源文件:_epub-src/text/part0155.html)
- 结论依据:原文说明"产品只能由工厂类创建,而不能被其他对象通过new方式创建,因此我们在这里还用到一个单来源调用(Single Call)方法解决该问题……即使你想使用类似这样的方法:Product p = new Product(new ProductManager(),"abc");也是不可能创建出产品的……这种一个对象只能由固定的对象初始化的方法就叫做单来源调用(Single Call)",并注明"采用单来源调用的两个对象一般是组合关系,两者有相同的生命期,它通常适用于有单例模式和工厂方法模式的场景中"。
- 原始内容:产品只能由工厂类创建,而不能被其他对象通过new方式创建,因此我们在这里还用到一个单来源调用(Single Call)方法解决该问题……这种一个对象只能由固定的对象初始化的方法就叫做单来源调用(Single Call)——很简单,但非常有用的方法……采用单来源调用的两个对象一般是组合关系,两者有相同的生命期,它通常适用于有单例模式和工厂方法模式的场景中。