面向面試學習,一起來玩工廠設計模式

2021-10-02 12:23:53 字數 4669 閱讀 2961

工廠設計模式算是經常在專案中使用的設計模式,屬於建立型模式,可以理解為建立物件的設計模式。

應用場景:根據業務情況需建立不同型別的物件,且物件又存在相似的業務邏輯,此時需要將建立物件的責任交由工廠類,工廠類會基於輸入建立物件。(該場景是根據自己的理解)

在查閱資料時看到有人講工廠設計模式分為三類,簡單工廠,工廠方法,抽象工廠,結合開發經驗而言,簡單工廠和抽象工廠是我使用較多的模式,所以本文僅著墨於此。

文中的**庫:

模組位置:design模組的com.coline.design.factory包中

簡單工廠模式就是我們平時使用最多的模式,假設我們專案需要小公尺手機和華為手機兩種手機,手機需要選擇cpu和螢幕型號,首先我們有乙個手機型別的介面phonetype (其實這裡涉及到了模板涉及模式,也是jdk中使用較多的設計模式)

package com.coline.design.factory.simplyway.intf;

/** * @author coline

* @description 手機型別介面類

*/public inte***ce phonetype

新建小公尺手機類和華為手機類並實現phonetype ,如下:

package com.coline.design.factory.simplyway.imp;

import com.coline.design.factory.simplyway.intf.phonetype;

/** * @author coline

* @description 小公尺產品,繼承phonetype介面

*/public class xiaomi implements phonetype

@override

public void screen()

}

package com.coline.design.factory.simplyway.imp;

import com.coline.design.factory.simplyway.intf.phonetype;

/** * @author coline

* @description 華為產品,繼承phonetype介面

*/public class huawei implements phonetype

@override

public void screen()

}

如果不使用工廠設計模式,那麼我們會在專案中的各個位置到處new這兩個實現類,**會顯得不優雅,丟失了程式設計師的尊嚴。所以我們可以將新建物件的職責交由工廠類來完成,**如下:

package com.coline.design.factory.simplyway;

import com.coline.design.factory.simplyway.imp.huawei;

import com.coline.design.factory.simplyway.imp.xiaomi;

import org.junit.test;

/** * 簡單的工廠模式

抽象工廠是為了應對更加複雜的業務情況,業務更便於擴充套件,主要設計思想是以業務屬性為維度,將**邏輯上移至業務屬性,方便批量處理。

業務場景:假設還是小公尺手機和華為手機的場景,手機廠商會根據戰略目標選擇不同的cpu和螢幕來滿足不同層級的需求,因此可以將cpu和螢幕理解為與手機本身為配件和整體的關係,所以首先我們有cpu的介面類,螢幕的介面類用於規範有哪些cpu和螢幕型號,**如下:

package com.coline.design.factory.abstractway.intf;

/** * @author coline

* @classname cpu

* @date 2020/2/2 0:03

* @description cpu工廠

*/public inte***ce cpu

}/**

* @classname cpu950

* @date 2020/2/2 0:32

* @description cpu950

*/class cpu950 implements cpu }}

package com.coline.design.factory.abstractway.intf;

/** * @author coline

* @classname screen

* @date 2020/2/2 0:11

* @description 螢幕工廠

*/public inte***ce screen

}/**

* @classname screen6

* @date 2020/2/2 0:33

* @description screen6

*/class screen6 implements screen }}

同時我們需要乙個手機的工廠介面類用於規範手機的組成,**如下:

package com.coline.design.factory.abstractway.intf;

/** * @author coline

* @classname phonefactory

* @date 2020/2/2 0:27

* @description 手機工廠

*/public inte***ce phonefactory

而後,我們根據業務需求,新建具體的手機類並實現手機工廠介面phonefactory 

package com.coline.design.factory.abstractway.imp;

import com.coline.design.factory.abstractway.intf.cpu;

import com.coline.design.factory.abstractway.intf.phonefactory;

import com.coline.design.factory.abstractway.intf.screen;

/** * @author coline

* @classname xiaomi

* @date 2020/2/2 0:36

* @description 小公尺手機,cpu850,螢幕5寸

*/public class xiaomi implements phonefactory

@override

public void getscreen()

}

package com.coline.design.factory.abstractway.imp;

import com.coline.design.factory.abstractway.intf.cpu;

import com.coline.design.factory.abstractway.intf.phonefactory;

import com.coline.design.factory.abstractway.intf.screen;

/** * @author coline

* @classname huawei

* @date 2020/2/2 0:38

* @description 華為手機cpu950,螢幕6寸

*/public class huawei implements phonefactory

@override

public void getscreen()

}

**邏輯就此完成,測試類如下:

package com.coline.design.factory.abstractway;

import com.coline.design.factory.abstractway.imp.huawei;

import com.coline.design.factory.abstractway.imp.xiaomi;

import org.junit.test;

/** * @author coline

* @classname createphonetest

* @date 2020/2/2 0:39

* @description 抽象工廠模式測試類

*/public class createphonetest

}

測試結果如下:

一起來讀《遊戲設計夢工廠》

什麼給予了玩家上述元素的意義?什麼是謎題?總結一起來讀 遊戲設計夢工廠 使用正規元素 在設計遊戲時,需要詢問自己一些關於目標的問題 遊戲學者對目標進行了一些分類 資源型別 衝突邊界 結果一起來讀 遊戲設計夢工廠 運用戲劇元素 在遊戲的結構方面,主要有以下幾個元素。遊戲最明顯的相同點就是它們都是為玩家...

一起來學習Ant Design

當然,都屬於webpack中的基礎知識,但是套上了atool build這樣乙個殼子,又有點小懵。還好不是很難,嘗試後,很快搞定了,順手也總結一下吧!一 安裝ant init 1 npm install antd init g 二 建立目錄 1 mkdir antd demo cd antd dem...

一起來學設計模式(2) 簡單工廠模式

其實,在gof的23種設計模式中,並沒有簡單工廠模式這種說法,為了和工廠模式 抽象工廠模式逐一對比,我們還是先從簡單工廠模式說起。工廠 即用來生產 產品 考慮以下需求 我需要通過乙個類來建立乙個蘋果,或者是建立乙個梨,或者是建立乙個。在上邊的需求中,這個可以建立蘋果 梨 香蕉的類即為簡單工廠類。同時...