我有接口及其实现:
public interface SyntaxConstruction{
public String parseFromString(String str);
}
public class Copy implements SyntaxConstruction{
public String parseFromString(String str){ //impl };
}
public class Set implements SyntaxConstruction{
public String parseFromString(String str){ //impl };
}
我也有以下课程:
public class Parser{
private static List<SyntaxElement> elementPrototypes; //should maintain the list of all implementation's prototypes
static{
//Initializing list with prtotypes of all possible SyntaxConstruction's implementations
}
public static List<SyntaxElement> parse(String str){
//getting syntax elements from str
}
}
现在我们添加一个新的实现,比如说
public class Values implements SyntaxConstruction{
public String parseFromString(String str){ //impl };
}
如果添加该类的用户不更新elementPrototypes
列表,则可能导致难以捕获的错误。我想让他们知道安全地更新列表吗?
答案 0 :(得分:2)
你可以使用一个抽象实现,将自己(在构造函数中)“注册”到Parser
的{{1}}中,类似于:
elementPrototypes
请注意,您还可以使用反射来“检测”public abstract class BaseSyntaxConstruction implements SyntaxConstruction {
protected BaseSyntaxConstruction() {
Parser.addElementPrototype(this);
}
}
public class Copy extends BaseSyntaxConstruction {
public String parseFromString(String str){
// impl
}
}
实现
根据您的评论,我认为您可能希望在此使用枚举来存储实现,无需实例化,无需注册(请参阅SyntaxConstruction
):
values()