設計模式個人理解【持續更新】

關於設計模式的一些個人理解以及示例代碼。會持續的進行更新上傳。

所有的實例已經提交到git中。

1 抽象工廠模式

抽象工廠模式的詳情介紹請查看:

抽象工廠模式介紹【菜鳥教程】

個人理解:

/**
 * @program: springbootdemo
 * @description: 抽象工廠模式測試類
 *
 * 抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創建其他工廠。該超級工廠又稱爲其他工廠的工廠。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。
 * 何時使用:系統的產品(A)有多於一個的產品族(B),而系統只消費其中某一族的產品(C)。
 *
 * 本例中:
 * 超級工廠(A);pc基礎廠商
 * 其他工廠(B):Dell(戴爾)、HP(惠普)
 * 戴爾會生產戴爾的電腦產品、惠普會生產惠普的電腦產品(C)。
 *
 * 電腦看爲一個大的系統(A),而有很多廠商(B)生產自己品牌的產品(C).
 * 就像生活中的我們去淘寶某品牌的旗艦店去買東西,該店肯定是隻售賣本品牌的產品,而我們買到的也肯定是該品牌的產品,不能買到其他品牌的產品。
 *
 * @author: lidongsheng
 * @createData: 2019-11-19 17:15
 * @updateAuthor: lidongsheng
 * @updateData: 2019-11-19 17:15
 * @updateContent: 抽象工廠模式測試類
 * @Version: 1.0.0
 * @email: [email protected]
 * @blog: www.b0c0.com
 * ************************************************
 * Copyright @ 李東昇 2019. All rights reserved
 * ************************************************
 */

public class TestMain {
    public static void main(String[] args) {
        HPFactory hpFactory = new HPFactory();
        Mouse HPMouse = hpFactory.creatMouse();
        Keybo HPkeybo = hpFactory.creatKeybo();
        HPMouse.say();
        HPkeybo.say();
        DellFactory dellFactory = new DellFactory();
        Mouse DellMouse = dellFactory.creatMouse();
        Keybo DellKeybo = dellFactory.creatKeybo();
        DellMouse.say();
        DellKeybo.say();
    }
}

 

該實例請查看git地址:

抽象工廠模式實例

2 橋接模式

橋接模式的詳情介紹請查看:

橋接模式介紹【菜鳥教程】

個人理解:

package com.lds.springbootdemo.designPatterns.Bridge;

/**
 * @program: springbootdemo
 * @description: 橋接模式測試類
 *
 * 當一種事物可在多種維度變化(如3個維度(m),每個維度3種可能(n))時,如果爲每一種可能創建一個子類,則每增加一個維度上的可能需要增加多個類,
 * 這會造成類爆炸(總共所需類:M的n次方)。並且非常多的重複功能。
 * 若使用橋接模式(總共所需類:m*n+n+1,使用類聚合,而非繼承,將可緩解類爆炸,並增強可擴展性。
 *
 * 本測試中的橋接模式例子爲把汽車拆成了三個維度,按品牌分(BMW、DF)、按擋位分(自動、手動)、按排量分(大、中、小)。這三個維度可以任意的進行組合。
 * 而我們如果要是想給某個維度增加一個可能的時候(比如擋位維度增加一個半自動),我們只需新建一個實現類(TransmissionSemiAuto)繼承Transmission,
 * 其他的邏輯不用變就可實現。
 *
 * 其實生活中的類似於組裝的雜牌電腦,電腦的每一個模塊(網卡、cpu、顯卡、風扇等等)其實就是不同的維度。
 * 而我們在選擇的時候,會有各種品牌或者型號的模塊(網卡、cpu、顯卡、風扇等等)。所以我們最終可以組裝出很多種可能的電腦。
 * 如果要是新增一個維度的話就必須在橋接類中(本例的橋接類就是AbstractCar)設置一下相應的維度即可,最好是在設計之初就把所有的要拆分的維度分析清楚
 *
 * @author: lidongsheng
 * @createData: 2019-11-20 18:34
 * @updateAuthor: lidongsheng
 * @updateData: 2019-11-20 18:34
 * @updateContent:
 * @Version: 1.0.0
 * @email: [email protected]
 * @blog: www.b0c0.com
 * ************************************************
 * Copyright @ 李東昇 2019. All rights reserved
 * ************************************************
 */

public class TestMain {
    public static void main(String[] args) {
        AbstractCar bmwCar=new CarBMW();
        bmwCar.setDisplacement(new DisplacementBig());
        bmwCar.setTransmission(new TransmissionAuto());
        bmwCar.run(5);
    }
}

該實例請查看git地址:

橋接模式實例

 

更新中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章