文章出處

使用頻率:★★★★★

一、什么是外觀模式

在子系統中的接口之上定義一個更高層次的接口,方便使用子系統中的接口;

二、補充說明

缺點:不符合開閉原則,修改子系統的代碼會影響高層接口代碼;

優點:引入外觀類可以降低系統的復雜度,提高了客戶端使用的便捷性;

優點:客戶類與子系統解耦;

三、角色

子系統角色

外觀角色

客戶端角色

四、例子,JAVA實現

模擬電腦開機情景,有三個子系統:BIOS系統,硬盤系統,操作系統;啟動過程是先啟動BIOS, 然后加載硬盤,然后啟動操作系統;

子系統角色,BIOS系統

package com.pichen.dp.structuralpattern.facade;
public class BIOS {

    public void start(){
        System.out.println("BIOS start.");
    }
}

子系統角色,硬盤系統

package com.pichen.dp.structuralpattern.facade;
public class Disk {
    public void load(){
        System.out.println("Disk load.");
    }
}

子系統角色,操作系統

package com.pichen.dp.structuralpattern.facade;
public class OS {
    /**
     * 假設啟動OS子系統需要用到Disk子系統作為入參
      * start
      * TODO
      * @Title: start
      * @Description: TODO
      * @param @param disk    
      * @return void    
      * @throws
     */
    public void start(Disk disk){
        System.out.println("OS start.");
    }
}

外觀角色,在子系統之上定義了一個更高層次接口,方便啟動PC

package com.pichen.dp.structuralpattern.facade;
public class ComputerFacade {

    private BIOS bios;
    private Disk disk;
    private OS os;
    public ComputerFacade() {
        bios = new BIOS();
        disk = new Disk();
        os = new OS();
    }
    
    public void start(){
        bios.start();
        disk.load();
        os.start(disk);
    }
}

客戶端角色,啟動PC, 如果不使用外觀模式,啟動PC較復雜,使用外觀模式,簡化了客戶端操作

package com.pichen.dp.structuralpattern.facade;
public class Main {
    public static void main(String[] args) {
        ComputerFacade pc = new ComputerFacade();
        pc.start();
        
        //不使用外觀模式情況
//        BIOS bios = new BIOS();
//        Disk disk = new Disk();
//        OS os = new OS();
//        bios.start();
//        disk.load();
//        os.start(disk);
    }

}

結果打印

BIOS start.
Disk load.
OS start.

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()