日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

【設計模式-3.1】結構型——外觀模式

作者:何中應 更新時間: 2023-12-09 編程語言

說明:本文介紹設計模式中結構型設計模式中的,外觀模式;

親手下廚還是點外賣?

外觀模式屬于結構型的設計模式,關注類或對象的組合,所呈現出來的結構。以吃飯為例,在介紹外觀模式之前,通過這個例子,談談我對面向對象的理解。

吃飯,是一個功能,可以有兩種方式來實現,對應的正是面向過程和面向對象的思想。

第一種,自己買菜買工具(初始化變量),做飯(實現方法),吃飯(實現方法),洗碗賣工具(釋放內存空間);

第二種,點外賣(手機對象),做飯(店家對象),送外賣(外賣員對象),吃飯(顧客對象);

在這里插入圖片描述

通過比較,就很容易理解兩種設計思想了。實際上就是實現功能的思路,一種是將功能分為一步一步,逐步實現(面向過程);一種是將屬性和行為封裝為對象,讓功能的實現在對象的交互中實現。

這兩種解題思路,沒有高低之分,也沒有哪種更優秀,殊途同歸。

外觀模式

以上面吃飯為例,面向對象設計,如下:

(Vegetables,蔬菜對象,提供蔬菜)

/**
 * 蔬菜對象
 */
public class Vegetables {

    public void provide() {
        System.out.println("提供蔬菜");
    }
}

(Cook,廚師對象,做飯)

/**
 * 廚師
 */
public class Cook {

    public void cook() {
        System.out.println("做飯");
    }
}

(用餐者對象,吃飯,吃完飯洗碗)

/**
 * 食客
 */
public class Diners {

    public void eat() {
        System.out.println("吃飯");
    }

    public void wash() {
        System.out.println("洗碗");
    }
}

(Client,客戶端,演示吃飯功能)

/**
 * 客戶端
 */
public class Client {
    public static void main(String[] args) {
        new Vegetables().provide();
        new Cook().cook();
        new Diners().eat();
        new Diners().wash();
    }
}

(執行結果)

在這里插入圖片描述

通過上面的例子,我們可以看出,實現一個功能涉及到多個對象的配合,那為什么我們不把這些對象中對應的功能(方法)綁定到一起,合并成一個業務層面上的功能(吃飯)呢?

如下:

(EatFacede,吃飯外觀類,捆綁各個對象的方法,實現吃飯功能)

/**
 * 吃飯外觀類
 */
public class EatFacede {

    /**
     * 蔬菜對象
     */
    private Vegetables vegetables;
    
    /**
     * 廚師對象
     */
    private Cook cook;
    
    /**
     * 食客對象
     */
    private Diners diners;

    public EatFacede() {
        vegetables = new Vegetables();
        cook = new Cook();
        diners = new Diners();
    }

    /**
     * 吃飯
     */
    public void eat() {
        vegetables.provide();
        cook.cook();
        diners.eat();
        diners.wash();
    }
}

(Client,客戶端,演示吃飯流程,只需要調用吃飯外觀類中的eat()方法即可)

/**
 * 客戶端
 */
public class Client {
    public static void main(String[] args) {
        new EatFacede().eat();
    }
}

(執行結果)
在這里插入圖片描述

以上就是結構型設計模式中,外觀模式的內容。這種將繁多的對象方法合并到一起,實現一項“大功能”的思路與生活經驗非常貼合。例如開公司,公司的合伙人一邊有資金,一邊有技術,聚在一起開公司干大事。

另外,在三層框架開發中,Controller層只管調用Service層中的一個方法,而在Service層中,該方法內可能去調用了其他Bean對象的方法,最終才實現了本Service中的這個功能,這也是外觀模式的體現。

總結

本文參考《設計模式的藝術》、《秒懂設計模式》兩書

原文鏈接:https://blog.csdn.net/qq_42108331/article/details/134793988

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新