本篇文章將為您簡單的介紹一下什么是軟件設(shè)計模式,并帶大家初步認(rèn)識一下設(shè)計模式之一的簡單工廠模式,下面我會用Java語言來展示簡單工廠模式的內(nèi)容。
一、軟件設(shè)計模式的概述
軟件設(shè)計模式,我們又稱之為設(shè)計模式。既然是模式,那么它就是按照一定規(guī)律指定的。也正是如此,設(shè)計模式就是一套被反復(fù)使用、大多數(shù)人都知道的、經(jīng)過整理分類的、前人代碼設(shè)計理念和經(jīng)驗的總結(jié)。它存在的目的,就是為了提高代碼的可重用性、可讀性以及可靠性。
二、簡單工廠模式
1、簡述
縱觀人類歷史,工廠從最開始的自產(chǎn)自銷的模式,到后來的農(nóng)耕社會的小作坊模式,再接著工業(yè)改革后的流水線模式,到現(xiàn)在的形成現(xiàn)代化產(chǎn)業(yè)鏈模式。同樣的道理,我們的項目代碼也是從簡單到繁雜,逐步迭代而來的。對于調(diào)用者而言,卻是越來越來簡單。就像是我們不用考慮工廠是怎么生產(chǎn)東西的,我們只需要購買即可。
按照實際業(yè)務(wù)場景,我們可以把工廠模式劃分為三種不同的實現(xiàn)方式:簡單工廠模式、工廠方法模式以及抽象工廠模式。
在這里,我們把被創(chuàng)建的對象稱之為“產(chǎn)品”,把創(chuàng)建產(chǎn)品的對象稱之為"工廠"。如果創(chuàng)建的產(chǎn)品很少,只需要一個工廠類就可以完成,那么我們就把這種模式稱之為簡單工廠模式。
2、優(yōu)缺點分析
優(yōu)點
- 工廠類必須要包含邏輯判斷,用來決定在什么時間創(chuàng)建哪個產(chǎn)品的實例。客戶端就不用承擔(dān)直接創(chuàng)建產(chǎn)品對象的責(zé)任,可以方便快捷地創(chuàng)建出相應(yīng)的產(chǎn)品。
- 客戶端不需要知道創(chuàng)建具體產(chǎn)品的類名,只要知道相關(guān)參數(shù)即可。
- 可以通過引入配置文件,在不修改客戶端代碼的前提下對具體產(chǎn)品類進行更換或者添加。
- 簡單工廠模式工廠類比較單一,承擔(dān)了所有產(chǎn)品的職責(zé)。一旦出現(xiàn)異常,那么整個系統(tǒng)將會受到影響。且工廠類代碼會十分的臃腫,違背了高聚合原則。
- 使用簡單工廠模式引入新的工廠類,會增加系統(tǒng)的復(fù)雜度和理解難度。
- 系統(tǒng)擴展的難度較高,添加新產(chǎn)品就不得不修改邏輯。在產(chǎn)品過多的時候,會造成邏輯過于復(fù)雜的問題。
- 簡單工廠模式使用的是static工廠方法,那么會造成工廠角色無法形成基于繼承的等級結(jié)構(gòu)。
3、模式的結(jié)構(gòu)和實現(xiàn)
- 簡單工廠(SimpleFactory):是該設(shè)計模式的核心,主要負(fù)責(zé)實現(xiàn)創(chuàng)建所有實例的內(nèi)部邏輯。
- 抽象產(chǎn)品(Product):是簡單工廠創(chuàng)建的所有對象的父類,主要負(fù)責(zé)描述所有實例的公共接口。
- 具體產(chǎn)品(ConcreteProduct):是該設(shè)計模式的創(chuàng)建目標(biāo),
具體結(jié)構(gòu)圖:
代碼實現(xiàn):
public class Client {
public static void main(String[] args) {
}
//抽象產(chǎn)品
public interface Product {
void show();
}
//具體產(chǎn)品:ProductA
static class ConcreteProduct1 implements Product {
public void show() {
System.out.println("具體產(chǎn)品1顯示...");
}
}
//具體產(chǎn)品:ProductB
static class ConcreteProduct2 implements Product {
public void show() {
System.out.println("具體產(chǎn)品2顯示...");
}
}
final class Const {
static final int PRODUCT_A = 0;
static final int PRODUCT_B = 1;
static final int PRODUCT_C = 2;
}
static class SimpleFactory {
public static Product makeProduct(int kind) {
switch (kind) {
case Const.PRODUCT_A:
return new ConcreteProduct1();
case Const.PRODUCT_B:
return new ConcreteProduct2();
}
return null;
}
}
}
三、總結(jié)
以上就是關(guān)于軟件設(shè)計模式中的簡單工廠模式的簡要概述和使用 Java 實現(xiàn)簡單工廠模式的示例代碼的全部內(nèi)容。想要了解更多關(guān)于 如何使用 Java 實現(xiàn)其他設(shè)計模式的內(nèi)容,請搜索W3Cschool以往的文章,也希望大家能夠多多關(guān)注和支持!