我最好用一个例子来解释这个问题。
我有一个接口模型可用于访问数据。
模型可以有不同的实现,可以以各种格式表示数据,例如 XMl 、txt 格式等。Model不关心格式。
可以说这样的一个实现是myxml模型.
现在我想强迫myxml模型以及其他所有实施Model跟随单例模式.通常的方法是使myxml模型构造函数私有并提供静态工厂方法来返回 myModel 类的实例。但问题是界面不能有静态方法定义,结果我不能在所有实现上强制执行特定的工厂方法定义Model。因此,一种实现可能以提供获取对象()和其他人可能已经得到新模型()。.
解决方法之一是允许包访问myxml模型的构造函数并创建一个工厂类,该类创建myxml模型对象并将其缓存以供进一步使用。
我想知道是否有更好的方法来实现相同的功能。
- 打造一个有回报的工厂
您的接口模型的实例。
- 使模型包私有类的所有具体实现
与您的工厂在同一包装中。
- 如果您的模型是单例,并且您使用的是 java
5+,使用枚举代替传统
单例,因为它更安全。
public enum MyXMLModel{
INSTANCE();
//rest of class
};
编辑:
另一种可能性是创建完成所有工作的委托类,然后使用枚举来提供所有模型选项。
例如:
class MyXMLModelDelegate implements Model {
public void foo() { /*does foo*/}
...
}
class MyJSONModelDelegate implements Model {
public void foo() { /*does foo*/ }
...
}
public enum Models {
XML(new MyXMLModelDelgate()),
JSON(new MyJSONModelDelegate());
private Model delegate;
public Models(Model delegate) { this.delegate=delegate; }
public void foo() { delegate.foo(); }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)