Về cơ bản tôi cần phải thực hiện các hành động khác nhau với một điều kiện nhất định. Mã hiện tại được viết theo cách này
Giao diện cơ sở
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Thực hiện lớp công nhân đầu tiên
class DoItThisWay implements DoSomething {
...
}
Thực hiện lớp công nhân thứ hai
class DoItThatWay implements DoSomething {
...
}
Lớp chính
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Mã này hoạt động tốt và dễ hiểu.
Bây giờ, do một yêu cầu mới, tôi cần phải truyền một mẩu thông tin mới chỉ có ý nghĩa DoItThisWay
.
Câu hỏi của tôi là: phong cách mã hóa sau có tốt để xử lý yêu cầu này không.
Sử dụng biến và phương thức lớp mới
// 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 {
...
}
} ;
}
Nếu tôi làm theo cách này, tôi cần thực hiện thay đổi tương ứng cho người gọi:
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)
}
Đó có phải là một phong cách mã hóa tốt? Hoặc tôi có thể bỏ nó
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
và DoItThatWay
được thực hiện một lần trong hàm tạo của Main
. Main
là một lớp sống lâu dài và doingIt
được gọi nhiều lần.
setQuality
phương thức sẽ được gọi nhiều lần trong suốt vòng đời của DoItThisWay
đối tượng?
quality
vào các nhà xây dựng choDoItThisWay
?