2016年蘋果春季發布會發布了一款迄今最高性能的4英寸iPhone,那么問題來了,蘋果公司的代工廠到底生產多少種尺寸的手機呢? 下面就讓簡單工廠告訴我們答案吧。
- 由工廠決定生產哪種型號的的手機,蘋果公司的工廠就是一個工廠類,是簡單工廠模式的核心類。
- iPhone5、iPhone5S、iphone6都是蘋果手機,只是型號不同。蘋果手機類滿足抽象的定義,各個型號的手機類是其具體實現。
簡單工廠模式的UML如下:
簡單工廠模式的實現
首先創建一個"蘋果手機"類,定義一個獲取手機尺寸的方法
/** * 蘋果手機 * @author songwz * */ public abstract class ApplePhone {
/** * 獲取尺寸 */ protected abstract void getSize(); } |
蘋果手機不同型號的"手機類"。
/** * Iphone4 * @author songwz * */ public class Iphone4 extends ApplePhone{
@Override public void getSize() { System.out.println("iPhone4屏幕:3.5英寸"); }
}
/** * iPhone5 * @author gt780 * */ public class Iphone5 extends ApplePhone {
@Override public void getSize() { System.out.println("iPhone5屏幕:4英寸"); }
}
/** * iPhone6 * @author songwz * */ public class Iphone6 extends ApplePhone{
@Override public void getSize() { System.out.println("iPhone6屏幕:4.7英寸"); }
} |
建立一個"工廠類"生產不同型號的"手機對象"。
/** * 蘋果工廠 * @author songwz * */ public class AppleFactory {
public static ApplePhone createPhone(String model){ ApplePhone applePhone = null;
switch (model) { case"iPhone4": applePhone = new Iphone4(); break; case"iPhone5": applePhone = new Iphone5(); break; case"iPhone6": applePhone = new Iphone6(); break; default: break; }
returnapplePhone; } } |
最后是客戶端測試類
public class Client {
public static void main(String[] args) { ApplePhone applePhone ; applePhone = AppleFactory.createPhone("iPhone4"); applePhone.getSize(); applePhone = AppleFactory.createPhone("iPhone5"); applePhone.getSize(); applePhone = AppleFactory.createPhone("iPhone6"); applePhone.getSize(); } } |
簡單工廠的優點:
- 松耦合,調用方只需與工廠類交互,無需關心實例怎么創建的。
- 擴展性強,只需新增一個實現類和修改工廠方法即可,這也算缺點的一方面。