我正在阅读有关工厂方法模式的信息。
我可以理解何时有一个工厂类,即StoreFactory#getStore()
返回Store
基于某个运行时或其他状态的实现。
但是,通过阅读(例如这个链接),似乎有一种人们创建抽象工厂类的一般模式,其他工厂类扩展到该类:
public abstract class AbstractFactory {
public abstract Store getStore(int store);
}
public class StoreFactoryA extends AbstractFactory {
public Store getStore(int Store) {
if(Store == 1) { return new MyStoreImplA(); }
if(Store == 2) { return new MyStoreImplB(); }
}
}
public class StoreFactoryB extends AbstractFactory {
public Store getStore(int Store) {
if(Store == 1) { return new MyStoreImplC(); }
if(Store == 2) { return new MyStoreImplD(); }
}
}
public class Runner {
public static void main(String[] args) {
AbstractFactory storeFactory = new StoreFactoryA();
Store myStore = storeFactory.getStore(1);
}
}
我的示例是人为设计的,但模拟了上述链接的示例。
这个实现对我来说似乎有点像鸡蛋。使用工厂方法模式消除了客户端代码指定类类型的需要,但现在客户端代码需要选择性地选择要使用的正确工厂,StoreFactoryA
即StoreFactoryB
?
在这里使用抽象类的原因是什么?