外觀模式為子系統的一組介面提供一個統一的高層介面,降低客戶端與子系統的耦合度,符合「迪米特法則」與「依賴倒置原則」。
租房者只需告訴中介預算,中介自動匹配合適房源並協商價格,屏蔽了複雜的房東溝通細節。
public class XiHuApartment {
private String location; private double price; private int status;
// getter/setter 省略
}
// XiXiApartment、CuiYuanApartment 結構相同
public class MediumFacade {
private CuiYuanApartment cuiyuan;
private XiXiApartment xixi;
private XiHuApartment xihu;
public MediumFacade() {
cuiyuan = new CuiYuanApartment("翠苑小區", 900, 1);
xixi = new XiXiApartment("西溪花園", 1200, 1);
xihu = new XiHuApartment("西湖小區", 2600, 1);
}
public void rentingHouse(double price) {
if (price >= cuiyuan.getPrice() && cuiyuan.getStatus() != 0) {
System.out.println("預訂" + cuiyuan.getLocation());
cuiyuan.setStatus(0);
} else if (price >= xixi.getPrice() && xixi.getStatus() != 0) {
System.out.println("預訂" + xixi.getLocation());
xixi.setStatus(0);
} else if (price >= xihu.getPrice() && xihu.getStatus() != 0) {
System.out.println("預訂" + xihu.getLocation());
xihu.setStatus(0);
} else {
System.out.println("出價太低/沒有房源 ...");
}
}
}
MediumFacade facade = new MediumFacade();
facade.rentingHouse(800); // 輸出:出價太低/沒有房源 ...
facade.rentingHouse(1000); // 輸出:預訂翠苑小區
| 優點 | 缺點 |
|---|---|
| 降低耦合、簡化介面、符合最少知識原則 | 過度使用會產生「上帝類」,違反單一職責 |