關於設計模式的一些個人理解以及示例代碼。會持續的進行更新上傳。
所有的實例已經提交到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地址:
更新中。。。