App下載

通過Java語言認(rèn)識軟件設(shè)計模式之簡單工廠模式

猿友 2021-07-21 16:28:51 瀏覽數(shù) (2171)
反饋

本篇文章將為您簡單的介紹一下什么是軟件設(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)點

  1. 工廠類必須要包含邏輯判斷,用來決定在什么時間創(chuàng)建哪個產(chǎn)品的實例。客戶端就不用承擔(dān)直接創(chuàng)建產(chǎn)品對象的責(zé)任,可以方便快捷地創(chuàng)建出相應(yīng)的產(chǎn)品。
  2. 客戶端不需要知道創(chuàng)建具體產(chǎn)品的類名,只要知道相關(guān)參數(shù)即可。
  3. 可以通過引入配置文件,在不修改客戶端代碼的前提下對具體產(chǎn)品類進行更換或者添加。
缺點
  1. 簡單工廠模式工廠類比較單一,承擔(dān)了所有產(chǎn)品的職責(zé)。一旦出現(xiàn)異常,那么整個系統(tǒng)將會受到影響。且工廠類代碼會十分的臃腫,違背了高聚合原則。
  2. 使用簡單工廠模式引入新的工廠類,會增加系統(tǒng)的復(fù)雜度和理解難度。
  3. 系統(tǒng)擴展的難度較高,添加新產(chǎn)品就不得不修改邏輯。在產(chǎn)品過多的時候,會造成邏輯過于復(fù)雜的問題。
  4. 簡單工廠模式使用的是static工廠方法,那么會造成工廠角色無法形成基于繼承的等級結(jié)構(gòu)。
應(yīng)用場景:簡單工廠模式適用于產(chǎn)品種類較少的情況下。

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)圖:

簡單工廠模式的結(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)注和支持!


0 人點贊