Java設計模式之 簡單工廠模式,簡單易於理解

簡單工廠模式:

1、 概念web

簡單工廠模式是屬於建立型模式,又叫作靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定建立出哪種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,能夠理解爲是不一樣工廠模式的一個特殊實現。編程

具體分類
1. 工廠(Creator)角色 簡單工廠模式的核心,
它負責實現建立全部實例的內部邏輯。工廠類能夠被外界直接調 用,建立所需的產品對象。
2. 抽象(Product)角色
簡單工廠模式所建立的全部對象的父類,它負責描述全部實例所共有的公共接口。
3. 具體產品(ConcreteProduct)角色
簡單工廠模式所建立的具體實例對象設計模式

2、代碼
一、建立一個接口 生產水果
在這裏插入圖片描述
二、建立兩個具體對象,蘋果和梨
在這裏插入圖片描述
在這裏插入圖片描述
三、建立一個測試類
(1 第一種測試方法,new一個對象
在這裏插入圖片描述
(2 第二種測試方法 使用接口實現多態
在這裏插入圖片描述
四、如今進入簡單工廠模式
首先建立一個工廠類 fruitfactory.Java
(1 、第一種 簡單工廠
在這裏插入圖片描述
調用測試
在這裏插入圖片描述
由上面地址發現,每次調用都會更新再調用
如今把簡單工廠方法換成靜態的
在這裏插入圖片描述
測試一下:
在這裏插入圖片描述
好像沒什麼變化,同樣是更新了,可是,靜態和非靜態是有區別的,下面是我查到的區別svg

static方法能夠經過類名訪問,也能夠經過類的實例訪問。
static方法不能訪問類中非static的數據。
好比
class A
{
static void F(){}
};
在main函數中能夠
A a;
a.F();
也能夠
A.F();
普通方法又叫實例方法,只能經過類的實例訪問。
他只能a.F();
一個JAVA類被加載的順序:
1.加載靜態成員、代碼塊
2.加載非靜態成員、代碼塊
3.調用構造方法。函數

原文連接:https://blog.csdn.net/xiaoshe200/article/details/6181341測試

(二、通用的工廠方法,經過相關的名稱就能返回
在這裏插入圖片描述
測試一下:
在這裏插入圖片描述
3、優缺點
簡單工廠有如下優勢。ui

幫助封裝
簡單工廠雖然很簡單,可是很是友好地幫助咱們實現了組件的封裝,而後讓組件外部能真正面向接口編程。.net

解耦設計

經過簡單工廠,實現了客戶端和具體實現類的解耦。
如同上面的例子,客戶端根本就不知道具體是由誰來實現,也不知道具體是如何實現的,客戶端只是經過工廠獲取它須要的接口對象。3d

簡單工廠有如下缺點。

可能增長客戶端的複雜度
若是經過客戶端的參數來選擇具體的實現類,那麼就必須讓客戶端能理解各個參數所表明的具體功能和含義,這樣會增長客戶端使用的難度,也部分暴露了內部實現,這種狀況能夠選用可配置的方式來實現。

不方便擴展子工廠

私有化簡單工廠的構造方法,使用靜態方法來建立接口,也就不能經過寫簡單工廠類的子類來
改變建立接口的方法的行爲了。不過,一般狀況下是不須要爲簡單工廠建立子類的。

簡單來講就是耦合度比較低,下面解上面的例子,增長一個對象香蕉
增長對象香蕉:
在這裏插入圖片描述
工廠要改變
在這裏插入圖片描述
測試類
在這裏插入圖片描述