秒懂簡單工廠模式
來源:mikechen的網際網路架構
簡單工廠模式 (Factory Pattern) 是 Java 中最常用的設計模式之一 。
簡單工廠模式實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類責,適用於工廠類責建立的物件比較少等場景中。
本文將採用圖解、原始碼方式,全面詳解簡單工廠模式。透過本文,我們可以瞭解並掌握以下知識:
簡單工廠模式(Simple Factory),又被稱為靜態工廠方法模式,屬於建立型設計模式,是由一個工廠物件決定建立出哪一種產品類的例項。
簡單工廠模式的 3 個重要構成分別是工廠類、抽象產品、具體產品。
工廠類:負責實現建立所有例項的內部邏輯。
抽象產品:所建立的所有物件的父類,負責描述所有例項所共有的公共介面。
具體產品:建立目標,所有建立的物件都充當這個角色的某個具體類的例項。
下面,我們透過一個場景例子、並提供相應的原始碼,來幫助理解剖析簡單模式的具體實現。
假設:
某手機生產廠商,原來為小米代工生產手機 。
隨著業務的擴充,這個手機生產廠商還要生產華為手機、蘋果手機。
此時,就需要使用一個單獨的類來專門生產手機,這裡就會用到簡單工廠方式。
mikechen的網際網路架構
我們來看下,用簡單工廠模式是怎樣實現的。
1) 建立抽象產品類,定義具體產品的公共介面。
首先,我們建立一個手機的抽象產品類,透過抽象方法來啟動手機。
package com.mikechen.java.design.factory.simple;
public abstract class Phone {
/**
* 產品的抽象方法,由具體的產品類去實現
*/
public abstract void start();
}
2)建立具體產品類,繼承抽象產品類,定義生產的具體產品。
接著,我們建立各個品牌的手機,它們都繼承了其父類 Phone ,並實現了父類的 start 方法:
小米手機:
package com.mikechen.java.design.factory.simple;
public class XiaomiPhone extends Phone{
public void start() {
System.out.println("小米手機啟動");
}
華為手機:
package com.mikechen.java.design.factory.simple;
public class HuaWei Phone extends Phone{
@Override
public void start() {
System.out.println("華為手機啟動");
}
蘋果手機:
package com.mikechen.java.design.factory.simple;
public class IPhone extends Phone{
public void start() {
System.out.println("蘋果手機啟動");
}
3)建立工廠類,透過建立靜態方法,根據傳入不同引數、建立不同具體產品類的例項。
工廠類提供了一個靜態方法 createPhone 用來生產手機。
只需要傳入工廠想要生產的手機品牌,就會例項化相應品牌的手機物件:
package com.mikechen.java.design.factory.simple;
public class PhoneFactory {
public static Phone createPhone(String type){
Phone mPhone=null;
switch (type) {
case "HuaWei":
mPhone=new HuaWeiPhone();
break;
case "xiaomi":
mPhone=new xiaomiPhone();
break;
}
return mPhone;
}
}
客戶端呼叫工廠類,傳入“HuaWei”生產出華為手機,並呼叫該手機物件的 start 方法:
package com.mikechen.java.design.factory.simple;
public class CreatPhone {
public static void main(String[]args){
PhoneFactory.createPhone ("HuaWei").start();
}
}
這裡我做了簡化,真實環境中,可以根據傳入的具體產品引數,來實現具體的產品。
簡單工廠模式的優點:
將建立例項的工作與使用例項的工作分開,使用者不必關心類物件如何建立,實現瞭解耦;
把初始化例項時的工作放到工廠裡進行,使程式碼更容易維護。
簡單工廠模式的缺點:
工廠類集中了所有例項(產品) 的建立邏輯,一旦這個工廠不能正常工作,整個系統都會受到影響;
違背“開放-關閉原則”,一旦新增新產品,就需要修改工廠類的邏輯,將導致工廠邏輯過於複雜;
簡單工廠模式由於使用了靜態工廠方法,靜態方法不能被繼承和重寫,會造成工廠角色無法形成基於繼承的等級結構。
客戶如果只知道傳入工廠類的引數,對於如何建立物件的邏輯不關心時;
客戶端既不需要關心建立細節,甚至連類名都不需要記住,只需要知道型別所對應的引數;
當工廠類負責建立的物件具體產品比較少時,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。
透過本文,我們瞭解並掌握了簡單工廠模式。
簡單工廠模式最大的優點在於實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類負責。缺點是工廠類不夠靈活,增加新的具體產品時,需要修改工廠類的判斷邏輯程式碼,當產品越來越多,工廠方法的程式碼就會非常複雜。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2995812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單工廠模式—>工廠模式模式
- 工廠模式之簡單工廠模式模式
- 簡單工廠和工廠模式模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 簡單工廠模式和抽象工廠模式模式抽象
- 工廠模式(簡單工廠模式)快速理解模式
- 簡單工廠模式模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式:抽象工廠模式,結合類圖秒懂!設計模式抽象
- 建立型:工廠模式-簡單工廠模式
- 簡單工廠和工廠方法模式模式
- 簡單工廠、工廠方法和抽象工廠模式抽象模式
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- 【Java】簡單工廠模式、工廠模式、介面卡模式Java模式
- 簡單工廠模式--SimpleFactory模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 簡單工廠、工廠模式初學習模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- 設計模式 - 簡單工廠模式設計模式
- 【設計模式】簡單工廠模式設計模式
- 設計模式——簡單工廠模式設計模式
- 設計模式-簡單工廠模式設計模式
- 工廠三兄弟之簡單工廠模式(三)模式
- 工廠三兄弟之簡單工廠模式(二)模式
- 工廠三兄弟之簡單工廠模式(一)模式
- 設計模式----簡單工廠設計模式
- java簡單的工廠模式Java模式
- Guice指南-簡單工廠模式GUI模式
- C++ - 簡單工廠模式C++模式
- aardio 簡單工廠模式模式
- 設計模式之簡單工廠模式設計模式
- java設計模式-簡單工廠模式Java設計模式
- 設計模式(一)—— 簡單工廠模式設計模式
- 簡單工廠模式(設計模式02)設計模式
- Java設計模式(一) 簡單工廠模式不簡單Java設計模式
- Java設計模式之簡單工廠、工廠方法和抽象工廠Java設計模式抽象
- 簡單工廠模式(Simple Factory Pattern)模式