天天看點

java設計模式-外觀模式筆記java設計模式-外觀模式

java設計模式-外觀模式

1.**外觀模式為子系統中的一組接口提供一個一緻的界面,此模式定義了一個高層接口,這個接口使得這個一子系統更加容易使用**

2)外觀模式通過定義一個一緻的接口,用以屏蔽内部子系統的細節,使得調用段隻需跟這個接口發生調用,而無需關心這個子系統的内部細節

java設計模式-外觀模式筆記java設計模式-外觀模式

原理類圖的說明(外規模式的角色)

  1. 外觀類(Facade):為調用端提供統―的調用接口,外觀類知道哪些子系統負責處理請求,進而将調用端的請求代理給适當子系統對象
  2. 調用者(Cliert):外觀接口的調用者
  3. 子系統的集合:指子產品或者子系統,處理Facade對象指派的任務,他是功能的提供者

比如電影院 播放電影 需要建立熒幕 和爆米花對象相應的功能 dvd對象的相應功能

使用外觀模式則隻需要 使用外觀類直接使用看電影方法 自動會調用相應的方法

爆米花類

public class baomihua {
	//使用餓漢式建立單例對象
    private static baomihua BAOMIHUA=new baomihua();

    private baomihua(){}
	//直接使用類名.擷取對象
    public static baomihua getBAOMIHUA(){
        return BAOMIHUA;
    }
    
    public void baomihuakaiji(){
        System.out.println("爆米花開機");
    }
    public void zhabaomihua(){
        System.out.println("炸爆米花");
    }
}
           

DVD

public class Dvd {
    private static Dvd DVD=new Dvd();

    private Dvd(){}

    public static Dvd getDVD(){
        return DVD;
    }

    public void dvdkaiji(){
        System.out.println("dvd開機");
    }
    public void dvdtouyin(){
        System.out.println("播放");
    }
    public void close(){
        System.out.println("關機");
    }
           

銀幕

//銀幕
public class Screen {

    private static Screen SCREEN=new Screen();

    private Screen(){}

    public static Screen getSCREEN(){

        return SCREEN;
    }

    public void up(){
        System.out.println("銀幕升起");
    }
    public void down(){
        System.out.println("銀幕下降");
    }
    public void close(){
        System.out.println("銀幕關機");
    }
}

           

外觀類相當于遙控器 将其他類組合

//遙控器
public class Waiguanlei {

    private Baomihua baomihua;
    private Dvd dvd;
    private Screen screen;

    public Waiguanlei(){
        this.baomihua= Baomihua.getBAOMIHUA();
        this.dvd=Dvd.getDVD();
        this.screen=Screen.getSCREEN();
    }
	//遙控器播放方法
    public void bofangdianyin(){
        baomihua.baomihuakaiji();
        baomihua.zhabaomihua();
        screen.down();
        dvd.dvdkaiji();
        dvd.dvdtouyin();
    }
    //遙控器播放關機
    
    public void guanji(){
        screen.up();
        screen.close();
        dvd.close();
    }
}
           

測試類

public static void main(String[] args) {
        //相當于遙控器
        Waiguanlei waiguanlei=new Waiguanlei();
     //播放電影
        waiguanlei.bofangdianyin();
        System.out.println("---------------");
     //關閉電影
        waiguanlei.guanji();
    }
           
java設計模式-外觀模式筆記java設計模式-外觀模式

外觀模式的注意事項和細節

  1. 外觀模式對外展蔽了子系統的細節,是以外觀模式降低了用戶端對子系統使用的複雜性
  2. 外觀模式對用戶端與子系統的耦合關系,讓子系統内部的子產品更易維護和擴充
  3. 通過合理的使用外觀模式,可以幫我們更好的劃分通路的層次
  4. 當系統需要進行分層設計時,可以考慮使用Facade(外觀)模式
  5. 在維護一個遺留的大型系統時,可能這個系統已經變得非常難以維護和擴充,此時可以考慮為新系統開發一個Facade類,來提供遺留系統的比較清晰簡單的接口,讓新系統與Facade類互動,提高複用性
  6. 不能過多的或者不合理的使用外觀模式,使用外觀模式好,還是直接調用子產品好。

    要以讓系統有層次,利于維護為目的。

Mybatis中 configuration中源碼分析

java設計模式-外觀模式筆記java設計模式-外觀模式
java設計模式-外觀模式筆記java設計模式-外觀模式