版權申明】非商業目的可自由轉載
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/86644481
出自:shusheng007
設計模式系列文章:
秒懂Java代理與動態代理模式
秒懂設計模式之建造者模式(Builder Pattern)
秒懂設計模式之簡單工廠模式(Simple Factory Pattern)
秒懂設計模式之工廠方法模式(Factory Method Pattern)
前言
人在IT江湖飄,不懂設計模式咋裝逼?
今天我們一起來看看三種工廠模式,其均爲創建型模式,即討論的是如何創建一個類的對象的問題。說到底就是以各種裝逼的方式最終將一個類的對象new出來。一點也不神祕,如果你發現需要一個類的對象而你又不會這些裝逼神器,那你就直接new好啦,愛誰誰。。。不過你也就逃脫不了永遠是個小白的命運啦,過幾年混不下去了就只能去賣奶茶,什麼?你不想那麼快就去賣奶茶,那就好好學習這些裝逼神器!
定義
The essence of the Abstract Factory Pattern is to “Provide an interface for creating families of related or dependent objects without specifying their concrete classes.”.
使用場景
如果你的業務中出現了要依據不同的產品家族來生產其旗下的一系列產品的時候,抽象工廠模式就配上用場了。
例如小米公司和蘋果公司就是兩個不同產品家族,而他們兩家都生產筆記本電腦和手機,那麼小米的筆記本電腦和蘋果的筆記本電腦肯定不一樣,手機情況也是如此。這就構成了兩個產品家族的系列產品之間比較的關係。
例如麥當勞和肯德基是兩個不同的產品家族,他們都生產漢堡和果汁。
如何實現
業務場景
富士康接了個大活,要爲小米公司和蘋果公司代工他們的筆記本電腦和手機生產業務。
下圖爲抽象工廠模式UML圖
下圖爲具體案例生成的UML圖
使用抽象工廠模式
第一步:定義一個電腦的抽象基類,裏面有一個爲電腦安裝操作系統的抽象方法。
public abstract class Computer {
public abstract void setOperationSystem();
}
public class MacComputer extends Computer {
@Override
public void setOperationSystem() {
System.out.println("Mac筆記本安裝Mac系統");
}
}
public class MiComputer extends Computer {
@Override
public void setOperationSystem() {
System.out.println("小米筆記本安裝Win10系統");
}
}
第二步:定義一個手機的抽象基類,裏面有一個爲手機安裝操作系統的抽象方法。
public abstract class MobilePhoto {
public abstract void setOperationSystem();
}
public class IPhoto extends MobilePhoto {
@Override
public void setOperationSystem() {
System.out.println("蘋果手機安裝IOS系統");
}
}
public class MiPhoto extends MobilePhoto {
@Override
public void setOperationSystem() {
System.out.println("小米手機安裝Android系統");
}
}
第三步:定義工廠類,這裏的工廠不是按照具體的產品類型定義,而是按照品牌家族來定義。例如現在有兩個品牌小米和蘋果,那麼就需要分別爲這兩個品牌各定義一個工廠,每個工廠生產這個品牌家族的系列產品,例如筆記本電腦和手機。
public interface AbstractFactory {
Computer makeComputer();
MobilePhoto makeMobilePhoto();
}
public class AppleFactory implements AbstractFactory {
@Override
public Computer makeComputer() {
return new MacComputer();
}
@Override
public MobilePhoto makeMobilePhoto() {
return new IPhoto();
}
}
public class XiaoMiFactory implements AbstractFactory {
@Override
public Computer makeComputer() {
return new MiComputer();
}
@Override
public MobilePhoto makeMobilePhoto() {
return new MiPhoto();
}
}
第四步:使用工廠來生產產品,不過這裏每個工廠可以生產那個品牌家族的一系列產品,而不是一個。
public static void main(String[] args) {
//使用蘋果工廠生產蘋果公司的系列產品
AbstractFactory appleFactory=new AppleFactory();
appleFactory.makeComputer().setOperationSystem();
appleFactory.makeMobilePhoto().setOperationSystem();
//使用小米工廠生產小米公司的系列產品
AbstractFactory miFactory=new XiaoMiFactory ();
miFactory.makeComputer().setOperationSystem();
miFactory.makeMobilePhoto().setOperationSystem();
}
理解抽象工廠模式的核心關鍵在於理解品牌家族的概念,簡單工廠方法與工廠方法創建工廠的着眼點爲某類具體的產品,某個工廠與某個產品對應,而抽象工廠某個工廠與產品的家族對應,這個工廠可以生產這個品牌家族的一系列產品。
總結
設計模式值得你刻意練習!