Middle Man
Penjelasan Smell
Middle Man adalah class yang isinya hanya delegasi saja, tidak ada behavior lain selain delegasi ke class lain.
Perhatikan LinkedList.java
dan ShoppingCart.java
. ShoppingCart
melakukan add
pada LinkedList
. Namun ternyata di dalam LinkedList
, dia hanya delegasi ke java.util.Vector
.
java
public class ShoppingCart {
private LinkedList<Item> items;
public ShoppingCart() {
this.items = new LinkedList<>();
}
public void add(Item item){
items.add(item);
}
public void remove(Item item){
items.remove(item);
}
public double totalPrice() {
double total = 0.0;
for (Item item : items.getList()) {
total += item.getPrice();
}
return total;
}
}
public class ShoppingCart {
private LinkedList<Item> items;
public ShoppingCart() {
this.items = new LinkedList<>();
}
public void add(Item item){
items.add(item);
}
public void remove(Item item){
items.remove(item);
}
public double totalPrice() {
double total = 0.0;
for (Item item : items.getList()) {
total += item.getPrice();
}
return total;
}
}
Penyelesaian
Hapus si Middle Man, yaitu LinkedList
. Sekarang di package after, class ShoppingCart
langsung mengakses java.util.Vector
.
java
public class ShoppingCart {
private Vector<Item> items;
public ShoppingCart() {
this.items = new Vector<>();
}
public void add(Item item){
items.add(item);
}
public void remove(Item item){
items.remove(item);
}
public double totalPrice() {
double total = 0.0;
for (Item item : items) {
total += item.getPrice();
}
return total;
}
}
public class ShoppingCart {
private Vector<Item> items;
public ShoppingCart() {
this.items = new Vector<>();
}
public void add(Item item){
items.add(item);
}
public void remove(Item item){
items.remove(item);
}
public double totalPrice() {
double total = 0.0;
for (Item item : items) {
total += item.getPrice();
}
return total;
}
}
Tambahan
Ada beberapa design pattern yang memang dirancang untuk delegasi, seperti: Adapter, Proxy, Bridge, Facade atau Mediator. Namun dalam design pattern ini bukan sekadar delegasi mentah-mentah, ada sedikit fitur di dalamnya. Design pattern ini masuk ke dalam Gang of Four Design Pattern, akan kita pelajari di semester depan.