Skip to content

Middle Man

sourcemaking

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.

Created by Saugi