《設計模式》之抽象工廠模式

提供一個接口用於創建相關或依賴對象的家族,而不需要明確指定具體類。

《設計模式》之抽象工廠模式


類型:

創建型模式


適用場景:

產品族


優點:

將一系列的產品族一起創建


缺點

規定了所有可能被創建的產品集合,產品族中擴展新的產品困難,需要修改抽象工廠的接口,同時增加系統抽象與理解難度。


抽象工廠與工廠方法的不同在於,抽象工廠關心產品族,工廠方法關心產品等級。


代碼實現

改進工廠方法模式

《設計模式》之工廠方法模式

在上一次的工廠方法中已經創建了手機產品的huawei工廠與iphone工廠。


我們只需要增加產品族即可

引入《設計模式》之工廠方法模式 中的Phone接口與具體實現


Phone.java 為所有生產手機的類提供了一種約束

<code>public class HuaweiPhone implements Phone {

@Override public void produce() {
System.out.println("生產華為手機");
}
}/<code>


HuaweiPhone.java 華為生產手機的具體實現

<code>public class HuaweiPhone implements Phone {

@Override public void produce() {
System.out.println("生產華為手機");

}
}/<code>

Iphone.java 蘋果生產產品的具體實現

<code>public class Iphone implements Phone {
@Override public void produce() {
System.out.println("produce iphone");
}
}/<code>


華為與蘋果不止生產手機,還生產智能手錶與藍牙耳機(抽象工廠的產品族指的就是本文中華為或蘋果這個品牌)。

創建智能手錶的相關實現

watch.java 接口,對所有智能手錶產品進行約束

<code>public interface Watch {
void produce()
;}/<code>

HuaweiWatch.java 華為手錶具體實現

<code>public class HuaweiWatch implements Watch{
@Override
public void produce() {
System.out.println("produce huawei watch");
}
}/<code>


AppleWatch.java 蘋果手錶具體實現

<code>public class AppleWatch implements Watch{ 

@Override
\t\t\tpublic void produce() {
\t\tSystem.out.println("produce apple watch");
}
}/<code>


創建生產產品的工廠

SmartDevice.java 對所有工廠進行約束

<code>public interface SmartDevice {
public Phone makePhone();
public Watch makeWatch();
}/<code>


HuaweiFactory.java 華為工廠

<code>public class HuaweiFactory implements SmartDevice{
@Override public Phone makePhone() {
return new HuaweiPhone(); }

@Override public Watch makeWatch() {
return new HuaweiWatch(); }
}/<code>


AppleFactory.java蘋果工廠

<code>public class AppleFactory implements SmartDevice{
@Override public Phone makePhone() {
return new Iphone(); }

@Override public Watch makeWatch() {
return new AppleWatch(); }
}/<code>


Client.java 客戶端調用

<code>public class Client {
public static void main(String[] args) {
SmartDevice smartDevice=new AppleFactory();
\tsmartDevice.makePhone().produce();
\tsmartDevice.makeWatch().produce();
}
}/<code>


UML類圖


《設計模式》之抽象工廠模式


本文代碼託管在GitHub

https://github.com/tanchengjin/designPattern


分享到:


相關文章: