我有一个工厂类Factory,它会吐出Document类的实例。实例化工厂时,它会创建Settings类的实例,并将引用存储在defaultSettings属性中。然后工厂调用defaultSettings.getDefaults()方法,该方法从数据库加载默认设置。
工厂创建的每个Document实例都应该使用默认属性值获取自己的Settings类实例,因为它们位于Factory的defaultSettings属性中(如在克隆中)。 Factory可以多次调用getDefaults()来更新默认设置;在程序生命周期内,可以创建100个douments,工厂可能已经更新了3次默认设置。
然后,文档实例可以在需要时修改自己的属性,而无需显着修改默认设置。public class Document
{
Settings mySettings;
public Document(Settings defaultSettings)
{
mySettings = defaultSettings;
}
public void updateRead(bool Option)
{
mySettings.canRead = Option;
}
}
public class Settings
{
public bool canRead;
public bool canWrite;
public void getDeafult()
{
canWrite = // Expensive DB call
}
}
public class Factory
{
Settings defaultSettings;
public Factory()
{
defaultSettings = new Settings();
defaultSettings.getDeafult();
}
public Document createDocument()
{
// Create a settings instance with the current default values
// and instantiate a document with these settings
}
}
如何在不使用Reflection的情况下实现这一目标?这似乎是合乎逻辑的事情..是否有适当的设计模式,或者是否有更好的替代设置呢?