App下載

通過Java語(yǔ)言認(rèn)識(shí)軟件設(shè)計(jì)模式之簡(jiǎn)單工廠模式

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

本篇文章將為您簡(jiǎn)單的介紹一下什么是軟件設(shè)計(jì)模式,并帶大家初步認(rèn)識(shí)一下設(shè)計(jì)模式之一的簡(jiǎn)單工廠模式,下面我會(huì)用Java語(yǔ)言來(lái)展示簡(jiǎn)單工廠模式的內(nèi)容。

一、軟件設(shè)計(jì)模式的概述

軟件設(shè)計(jì)模式,我們又稱之為設(shè)計(jì)模式。既然是模式,那么它就是按照一定規(guī)律指定的。也正是如此,設(shè)計(jì)模式就是一套被反復(fù)使用、大多數(shù)人都知道的、經(jīng)過整理分類的、前人代碼設(shè)計(jì)理念和經(jīng)驗(yàn)的總結(jié)。它存在的目的,就是為了提高代碼的可重用性、可讀性以及可靠性。


二、簡(jiǎn)單工廠模式

1、簡(jiǎn)述

縱觀人類歷史,工廠從最開始的自產(chǎn)自銷的模式,到后來(lái)的農(nóng)耕社會(huì)的小作坊模式,再接著工業(yè)改革后的流水線模式,到現(xiàn)在的形成現(xiàn)代化產(chǎn)業(yè)鏈模式。同樣的道理,我們的項(xiàng)目代碼也是從簡(jiǎn)單到繁雜,逐步迭代而來(lái)的。對(duì)于調(diào)用者而言,卻是越來(lái)越來(lái)簡(jiǎn)單。就像是我們不用考慮工廠是怎么生產(chǎn)東西的,我們只需要購(gòu)買即可。

按照實(shí)際業(yè)務(wù)場(chǎng)景,我們可以把工廠模式劃分為三種不同的實(shí)現(xiàn)方式:簡(jiǎn)單工廠模式、工廠方法模式以及抽象工廠模式。

在這里,我們把被創(chuàng)建的對(duì)象稱之為“產(chǎn)品”,把創(chuàng)建產(chǎn)品的對(duì)象稱之為"工廠"。如果創(chuàng)建的產(chǎn)品很少,只需要一個(gè)工廠類就可以完成,那么我們就把這種模式稱之為簡(jiǎn)單工廠模式。

2、優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn)

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

3、模式的結(jié)構(gòu)和實(shí)現(xiàn)

簡(jiǎn)單工廠模式的主要角色劃分:
  • 簡(jiǎn)單工廠(SimpleFactory):是該設(shè)計(jì)模式的核心,主要負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。
  • 抽象產(chǎn)品(Product):是簡(jiǎn)單工廠創(chuàng)建的所有對(duì)象的父類,主要負(fù)責(zé)描述所有實(shí)例的公共接口。
  • 具體產(chǎn)品(ConcreteProduct):是該設(shè)計(jì)模式的創(chuàng)建目標(biāo),

具體結(jié)構(gòu)圖:

簡(jiǎn)單工廠模式的結(jié)構(gòu)圖

代碼實(shí)現(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è)計(jì)模式中的簡(jiǎn)單工廠模式的簡(jiǎn)要概述和使用 Java 實(shí)現(xiàn)簡(jiǎn)單工廠模式的示例代碼的全部?jī)?nèi)容。想要了解更多關(guān)于 如何使用 Java 實(shí)現(xiàn)其他設(shè)計(jì)模式的內(nèi)容,請(qǐng)搜索W3Cschool以往的文章,也希望大家能夠多多關(guān)注和支持!


0 人點(diǎn)贊