如果我有一个类,其中的所有函数都需要首先通过检查,那么以下哪个是更优选的
1
class check{
public check(Status){
if(CheckFunc(Status)){
// Passed the Check function and return a class instance
return new UpdateClass();
}
}
class UpdateClass{
public void Func1(){
// Do the stuff
}
// Other functions...
}
OR
2
class UpdateClass{
boolean passedCheck = false;
public UpdateClass(Status){
if(checkFunc(Status)){
this.passedCheck = true;
}
}
public void Func1(){
if(this.passedCheck){
// Do the stuff
...
}
}
// Other functions...
}
另外,使用类/函数决定要实例化哪个类是一种好方法吗?
例如:
public Animal decideWhichClass(Status){
if(Status == StatusA){
return new Dog();
}
else if (Status == StatusB){
return new Cat();
}
}
Animal a = decideWhichClass(CurrentStatus);
答案 0 :(得分:1)
第一个问题)检查是更新处理的要求
在第一种方式中,您没有这种保证,因为UpdateClass
可以在不通过支票的情况下创建和使用。
第二个更好,因为它阻止绕过检查:
public UpdateClass(Status){
if(checkFunc(Status)){
this.passedCheck = true;
}
}
此外,使用类/函数决定使用哪个类是一种好方法 要实例化?
示例很宽泛但是可以接受factory
个实例化的子类依赖于特定参数的对象。
请注意,为避免if/elseIf
,该函数可能依赖于Map结构
这是Java中的一个示例(但您可以在任何Object语言中获得类似的东西):
public class AnimalFactory{
private static Map<Status, Supplier<Animal>> map = new HashMap<>();
private AnimalFactory(){
}
static {
map.put(Status.A, Dog::new);
map.put(Status.B, Cat::new);
}
public static Animal ofAnimal(Status status){
return map.get(status).get();
// of course you should also handle the error case : no association found
}
}
//Client code
Animal a = AnimalFactory.ofAnimal(Status.B);