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

定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個,工廠方法讓類把實例化推辭到子類。


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


類型:

創建型


適用場景:

創建對象需要大量重複的代碼

一個類通過其子類來指定要創建的對象


優點:

加入新產品不需要修改代碼,提高了可擴展性

客戶無需關注細節,只需關心所對應產品工廠


缺點:

類的個數容易過多增加複雜度

增加系統抽象與理解難度

添加產品時,還需要添加具體的工廠類


代碼實現

首先要生產的產品類

如生產手機,定義各個手機廠商的手機產品類即可

首先定義一個手機接口Phone.java(目的是對各個手機產品形成規範,對外提供統一的接口)

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


定義具體產品並實現Phone接口

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>


定義PhoneFactory.java 產品工廠


<code>public abstract class PhoneFactory {
public abstract Phone makePhone();
}/<code>


將創建對象延遲到子類

HuaweiPhoneFactory.java 華為手機工廠

<code>public class HuaweiPhoneFactory extends PhoneFactory{
@Override public Phone makePhone() {
return new HuaweiPhone(); }
}/<code>


IPhoneFactory.java 蘋果手機工廠

<code>class IPhoneFactory extends PhoneFactory{
@Override public Phone makePhone() {
return new Iphone(); }
}/<code>


客戶端調用

<code>public class Client {
public static void main(String[] args) {
PhoneFactory phone =new HuaweiPhoneFactory();
phone.makePhone().produce();
}
}/<code>

可以看到客戶端調用時只需要調用具體的工廠即可,修改時改變工廠即可。我們只需要關心具體的工廠而不需要關心其內部實現。同時也符合了開閉原則(不修改工廠內部的源碼實現)。


UML類圖

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


分享到:


相關文章: