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(); } } |
简单工厂的优点:
- 松耦合,调用方只需与工厂类交互,无需关心实例怎么创建的。
- 扩展性强,只需新增一个实现类和修改工厂方法即可,这也算缺点的一方面。
来源:http://www.cnblogs.com/hehesong/p/5306914.html