Java設計模式筆記之外觀模式

1.前言

外觀模式使用頻率很高。

2.定義

外觀模式(Facade):爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

3.UML圖



4.使用場景

(1)爲一個複雜子系統提供一個簡單接口。

(2)需要構建一個層次結構的子系統時,使用Facade模式定義子系統中每層的入口點。如果子系統之間是相互依賴的,可以讓他們僅通過Facade接口進行通信,簡化它們之間的依賴關係。

5.簡單實例

public class MobilePhone {
    private Phone phone = new PhoneImpl();
    private Camera camera = new CameraImpl();

    public void dail(){
        phone.dial();
    }

    public void videoChat(){
        Log.i("zsf","視頻接通中...");
        camera.open();
        phone.dial();
    }

    public void hangup(){
        phone.hangup();
    }

    public void takePicture(){
        camera.open();
        camera.takePicture();
    }

    public void closeCamera(){
        camera.close();
    }
}

public interface Phone {
    void dial();//打電話
    void hangup();//掛斷
}

public interface Camera {
    void open();//打開攝像頭
    void close();//關閉攝像頭
    void takePicture();
}

public class PhoneImpl implements Phone {
    @Override
    public void dial() {
        Log.i("zsf","打電話");
    }

    @Override
    public void hangup() {
        Log.i("zsf", "掛斷電話");
    }
}

public class CameraImpl implements Camera {

    @Override
    public void open() {
        Log.i("zsf","打開攝像頭");
    }

    @Override
    public void close() {
        Log.i("zsf","關閉攝像頭");
    }

    @Override
    public void takePicture() {
        Log.i("zsf","拍攝照片");
    }
}

public class FacadeTestActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MobilePhone mobilePhone = new MobilePhone();
        mobilePhone.takePicture();

        mobilePhone.videoChat();
    }
}

輸出如下:

06-24 22:05:12.124 23811-23811/? I/zsf: 打開攝像頭
06-24 22:05:12.124 23811-23811/? I/zsf: 拍攝照片
06-24 22:05:12.124 23811-23811/? I/zsf: 視頻接通中...
06-24 22:05:12.124 23811-23811/? I/zsf: 打開攝像頭
06-24 22:05:12.124 23811-23811/? I/zsf: 打電話

5.總結

外觀模式的精髓就在於封裝。通過一個高層次結構爲用戶提供統一的API入口,使用戶通過一個類型就可以操作這個系統。



發佈了105 篇原創文章 · 獲贊 35 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章