我有Worker
一种方法的接口:
interface Worker {
public void work()
}
我有两个实现的类Worker
,
class RoadWorker implements Worker {
public void setPropertyA() {}
public void work() {}
}
另一个,
class GardenWorker implements Worker {
public void setPropertyB() {}
public void work() {}
}
在我的Application
课堂上-基于一些输入标志-我想实例化一种特定类型的worker ...
class Application {
// flag
String whichWorker = "Road";
// instantiate
if (whichWorker == "Road") {
RoadWorker worker = new RoadWorker();
worker.setPropertyA();
} else {
GardenWorker worker = new GardenWorker();
worker.setPropertyB();
}
// use
worker.work(); <----- OF COURSE THIS DOES NOT WORK (no reference)
所以,我尝试了-
class Application {
// flag
String whichWorker = "Road";
Worker worker;
// instantiate
if (whichWorker == "Road") {
worker = new RoadWorker();
worker.setPropertyA(); <----- DOES NOT WORK
} else {
worker = new GardenWorker();
worker.setPropertyB(); <----- DOES NOT WORK
}
// use
worker.work();
我的问题是-如何设计我的程序来实现此要求?我知道一个粗略的选择是将worker定义为,Object
但是随后我将不得不做很多我不想做的类型转换。有人可以建议吗?
使用构造函数设置属性或工厂模式。
第一种解决方案比较简单,但有其局限性:
interface Worker {
public void work()
}
class RoadWorker implements Worker {
RoadWorker(PropertyA property) {
this.property = property;
}
}
void foo() {
Worker worker = null;
if (whichWorker.equals("road")) {
worker = new RoadWorker(property);
}
worker.work();
}
两个注意事项:
如果您需要更大的灵活性,则工厂方法模式可能更适合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句