首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式:外觀模式深度解析與實戰

     編輯:Java 相關知識

模式定義

外觀模式為子系統的一組介面提供一個統一的高層介面,降低客戶端與子系統的耦合度,符合「迪米特法則」與「依賴倒置原則」。

生活實例:租房中介

  • 客戶端:租房者
  • 外觀類:房屋中介(鏈家、我愛我家)
  • 子系統:各小區房源(翠苑、西溪、西湖)

租房者只需告訴中介預算,中介自動匹配合適房源並協商價格,屏蔽了複雜的房東溝通細節。

代碼實現

子系統類

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); // 輸出:預訂翠苑小區

應用場景

  1. 分層架構:各層之間建立 Facade,如 Controller → Service Facade → DAO
  2. 重構過渡期:為複雜舊系統提供簡潔介面,新系統僅依賴 Facade
  3. 第三方庫封裝:隱藏複雜 API,提供業務導向的簡易方法

優缺點

優點缺點
降低耦合、簡化介面、符合最少知識原則過度使用會產生「上帝類」,違反單一職責
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved