1. 程式人生 > >門面模式及Java實現

門面模式及Java實現

一、概念

     門面模式(Facade)也叫外觀模式,它隱藏了系統的複雜性,並向客戶端提供了一個可以訪問系統的介面,所以門面模式也是一種結構性模式。門面模式為子系統的一組介面提供一個統一的訪問介面(入口),客戶端直接通過門面類裡的統一的訪問介面,來間接呼叫子系統的方法,從而減少客戶端和子系統的耦合。

二、角色及使用場景

 簡單的說就是把一些複雜的流程封裝成一個介面供外部使用者使用。這個模式中,涉及到三個角色:

1)        門面角色:門面模式的核心,直接被客戶端呼叫,內部去具體呼叫子系統或子模組的功能

2)        子系統角色:實現子系統的功能,對客戶角色未知,提供介面或實現類供門面呼叫

3)        客戶角色:呼叫門面實現功能

         整個呼叫關係如上圖所示,client為客戶角色、facade為門面角色,子系統為各個模組。門面模式一般應用於以下場景:

1)        為複雜的模組或子系統提供外部訪問的模組

2)        子系統相對獨立

3)        系統分層中,通過外觀模式定義每一層的入口

三、java實現

例如聚划算商家設定了某個商品開團後提醒參團的顧客,但是通知提醒同時需要簡訊通知和郵件通知,使用門面模式,商家設定後客戶端程式只調用門面傳送通知,具體怎麼通知客戶有門面負責,實現了客戶端程式和具體子系統的解耦

 程式碼實現:

1.首先是子系統類

publicclass Sms {
    public void  sendMessage(){
        System.out.println("send sms to notice customer");
    }
}

public class Email {
    public  void  sendMessage(){
        System.out.println("send email  to notice customer");
    }
}

2.門面類

public class MessageFacade {
    private  Sms sms
;     private Email email;     public  MessageFacade(){         sms=new Sms();         email=new Email();     }     public  void  noticeCustomer(){         sms.sendMessage();         email.sendMessage();     } }

3.最後是客戶端呼叫

public static void main(String[] args) {
    //客戶端直接呼叫訊息門面去通知顧客,不需要知道子系統是怎麼傳送訊息的
    MessageFacade messageFacade=new MessageFacade();
    messageFacade.noticeCustomer();
}

四、外觀模式的優缺點

    優點:

1. 鬆散耦合。客戶端和子系統解耦,子系統相對獨立,利於擴充套件和維護

2. 靈活易用。客戶端只需和門面互動即可實現功能,不需知道子系統的內部構成和實現,業務更新時也只需修改門面的規則即可。

3.層次清晰。子系統把暴露對外的功能通過門面提供統一訪問入口,客戶端訪問需通過上層的門面,系統結構層次更清晰

   缺點:增加新的子系統可能需要修改門面類或客戶端,違背了開閉原則