設(shè)計(jì)模式【2】-- 簡單工廠模式了解一下?

[TOC]

1.簡單工廠模式介紹

工廠模式,比較常用,屬于創(chuàng)建型模式,也就是主要是用來創(chuàng)建對象的。工廠模式,有三種,主要分為:

  • 簡單工廠模式
  • 工廠方法模式
  • 抽象工廠模式

其中,本文要講的就是,簡單工廠模式,但是簡單工廠模式,并不是屬于GoF講的23種設(shè)計(jì)模式中。簡單工廠模式,也叫靜態(tài)工廠方法模式。簡單而言,就是有一個(gè)具體的工廠類,用來生產(chǎn)不同類型的對象,而這些對象,都有相似的特點(diǎn),它們都實(shí)現(xiàn)同一個(gè)接口。

什么時(shí)候應(yīng)該使用工廠模式?為什么需要工廠模式呢?

工廠模式主要是用來生成不同的對象,也就是屏蔽了對象生成的時(shí)候的復(fù)雜性,使用的時(shí)候不需要知道對象是怎么生成的,而只需要關(guān)注要生成什么對象。如果構(gòu)造一個(gè)對象特別的費(fèi)勁,而我們又經(jīng)常需要構(gòu)造生成這個(gè)對象,那么使用工廠模式是比較有利的。我們都知道,設(shè)計(jì)模式主要就是為了設(shè)計(jì)出更加簡潔,易懂,方便維護(hù),方便拓展的代碼。

如果一個(gè)很復(fù)雜的對象,要在多個(gè)地方構(gòu)建,那么要是改動(dòng)一次,我們就需要找出所有引用的地方,逐一修改,那會很麻煩。

簡單工廠模式主要有三種角色:

  • 簡單工廠:負(fù)責(zé)創(chuàng)建所有的實(shí)例,依照不同的類型創(chuàng)建不同的對象,也就是產(chǎn)品。
  • 抽象產(chǎn)品接口:也就是所有產(chǎn)品的一個(gè)抽象,一般是所有產(chǎn)品都需要實(shí)現(xiàn)的接口。
  • 具體產(chǎn)品:實(shí)現(xiàn)抽象產(chǎn)品接口,不同的產(chǎn)品做不一樣的實(shí)現(xiàn)。

2.簡單工廠模式舉例

假設(shè)現(xiàn)在有一個(gè)果園,用來種植各種水果,但是每一種水果種植的方式又不一樣。首先,先定義一個(gè)接口Fruit:

public interface Fruit {
    public void process();
}

定義三種水果Apple,Pear,Orange:

public class Apple implements Fruit{
    public void process() {
        System.out.println("I am an Apple");
    }
}
public class Pear implements Fruit{
    public void process() {
        System.out.println("I am a Pear");
    }
}
public class Orange implements Fruit{
    public void process() {
        System.out.println("I am an Orange");
    }
}

創(chuàng)建一個(gè)工廠類:

public class FruitFactory {
    public static Fruit getFruit(String name) {
        if ("Apple".equalsIgnoreCase(name)) {
            return new Apple();
        } else if ("Pear".equalsIgnoreCase(name)) {
            return new Pear();
        } else if ("Orange".equalsIgnoreCase(name)) {
            return new Orange();
        }
        return null;
    }
}

測試代碼如下:

public class FruitTest {
    public static void main(String[] args) {
        Fruit apple = FruitFactory.getFruit("Apple");
        apple.process();
        Fruit pear = FruitFactory.getFruit("Pear");
        pear.process();
        Fruit orange = FruitFactory.getFruit("Orange");
        orange.process();
    }
}

測試結(jié)果如下:

<img src="https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/image-20201218231609645.png" alt="image-20201218231609645" style="zoom:50%;" />

這樣的寫法,如果后續(xù)再來了一種水果,那么只需要實(shí)現(xiàn)接口,同時(shí)在工廠中增加一個(gè)case即可。

3.簡單工廠模式的優(yōu)劣

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

  • 產(chǎn)品和工廠的職責(zé)比較分明,工廠負(fù)責(zé)創(chuàng)建,產(chǎn)品負(fù)責(zé)自己的實(shí)現(xiàn)
  • 產(chǎn)生/構(gòu)建產(chǎn)品比較簡單,不需要關(guān)注內(nèi)部細(xì)節(jié),只需要知道自己想要哪一種。
  • 增加或者修改產(chǎn)品比較簡單,解耦合。

凡事都有優(yōu)劣,簡單工廠方法的缺點(diǎn)在于:

  • 工廠類的重要性很高,一旦出現(xiàn)問題,影響所有的產(chǎn)品。
  • 產(chǎn)品數(shù)量一旦特別多的時(shí)候,工廠內(nèi)部邏輯會比較復(fù)雜,不利于理解和維護(hù)。
  • 靜態(tài)方法不利于繼承和實(shí)現(xiàn)。

從以上的優(yōu)劣,我們可以知道,其實(shí)如果產(chǎn)品創(chuàng)建過程比較復(fù)雜,而且個(gè)數(shù)不多,都是依靠某些參數(shù)來創(chuàng)建的話,抽象出簡單工廠模式,其實(shí)是比較有利的一種做法。

【作者簡介】:
秦懷,公眾號【秦懷雜貨店】作者,技術(shù)之路不在一時(shí),山高水長,縱使緩慢,馳而不息。求個(gè) 贊 和 在看 ,對我,是莫大的鼓勵(lì)和認(rèn)可,讓我更有動(dòng)力持續(xù)寫出好文章。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容