基本上,我需要在特定条件下执行不同的操作。现有代码以这种方式编写
基本介面
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
实施第一类工人
class DoItThisWay implements DoSomething {
...
}
实施第二类工人
class DoItThatWay implements DoSomething {
...
}
主班
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
该代码可以正常工作,并且易于理解。
现在,由于一项新要求,我需要传递一条仅对有意义的新信息DoItThisWay
。
我的问题是:以下编码样式是否可以很好地满足此要求。
使用新的类变量和方法
// Use new class variable and method
class DoItThisWay implements DoSomething {
private int quality;
DoSomething() {
quality = 0;
}
public void setQuality(int quality) {
this.quality = quality;
};
public void letDoIt(String info) {
if (quality > 50) { // make use of the new information
...
} else {
...
}
} ;
}
如果这样做,则需要对调用方进行相应的更改:
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
int quality = obtainQualityInfo();
DoItThisWay tmp = new DoItThisWay();
tmp.setQuality(quality)
worker = tmp;
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
这是一种好的编码风格吗?还是我可以抛弃它
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
int quality = obtainQualityInfo();
worker = new DoItThisWay();
((DoItThisWay) worker).setQuality(quality)
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
DoItThisWay
和DoItThatWay
的构造必须在的构造函数中完成一次Main
。Main
是一个长期生活的阶层,doingIt
一遍又一遍地被多次呼唤。
setQuality
在DoItThisWay
对象的生存期内将多次调用该方法吗?
quality
给构造函数DoItThisWay
呢?