設計模式之工廠模式(工廠方法模式、簡單工廠模式、抽象工廠模式)
阿新 • • 發佈:2018-12-11
工廠模式
工廠模式是最常用的設計模式之一,這種型別的設計模式屬於建立設計模式,它提供了一種建立物件的最佳方式。
優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想要增加多一個產品,只要擴充套件一個工廠類就可以了。 3、隱蔽產品的具體實現,呼叫者只要關係產品的介面。
程式碼編寫出來是為了給別人 (client) 呼叫的:
• 呼叫者 (client) 跟程式碼編寫者 (provider),可能是同一個人,也可能是不同的人
• 提供給呼叫者的程式碼,有可能是原始碼可見的,也可能是原始碼不可見、不可修改的(比如 jar 包)
所以,為了簡化程式碼的協作使用及管理維護,必須想盡辦法簡化程式碼邏輯,實現必要的分離
一、工廠方法模式
為 Phone 工廠建立一個介面:
/** * 工廠類的基類(介面類) */ public interface phoneFactory { phone createPhone(); }
如果想增加一款產品,比如 iPhone 手機,只需要為 iPhone 手機增加一個工廠類就可以了:
/** * iPhone 手機工廠類 */ public class IphoneFactory implements phoneFactory { @Override public phone createPhone(){return new iPhone(); } }
如果還想增加一個 vivo 手機,還是增加一個相對的工廠類就可以了:
/** * vivo 手機工廠類 */ public class VivoFactory implements phoneFactory { @Override public phone createPhone(){ return new Vivo(); } }
客戶端呼叫:
// 蘋果手機的工廠類 phoneFactory Factory1 = new IphoneFactory(); Factory1.createPhone();// vido 手機的工廠類 phoneFactory Factory2 = new VivoFactory(); Factory2.createPhone();
二、簡單工廠模式
步驟一:建立一個介面類:
/** * 所有手機基類(介面類) */ public interface phone { void play(); }
步驟二:建立實體類,實現介面的 play() 方法:
/** * 華為手機實體類 */ public class Huawei implements phone { @Override public void play() { System.out.println("玩華為手機"); } }
/** * 小米手機實體類 */ public class Mi implements phone { @Override public void play() { System.out.println("玩小米MIX2"); } }
步驟三:工廠類
/** * 簡單工廠類 */ public class PhoneFactory { public phone createPhone1(String tag) { if (tag.equals("pg")) { return new iPhone(); } else if (tag.equals("hw")) { return new Huawei(); } return null; } }
三、抽象工廠模式
步驟一:建立一個工廠介面
/** * 工廠類的基類(介面類) */ public interface phoneFactory { phone createPhone(phone p); usb createUSB(); charger createCharger(); }
步驟二:實現工廠介面的方法,去呼叫封裝好的手機類
/** * 華為手機工廠類(實現工廠介面的方法) */ public class HuaweiPhoneFactory implements phoneFactory { phone createPhone() { return new HuaweiPhone(); } usb createUSB() { return new HuaweiUSB(); } charger createCharger() { return new HuaweiCharger(); } }
步驟五:客戶端的呼叫
public static void main(String[] args) { // 這是一個華為手機的工廠類,實現了小米手機的方法 phoneFactory factory = new HuaweiFactory(); pf.createPhone(); pf.createUsb(); pf.createCharger(); }