接着上一篇简单工厂模式的例子,这里给出一个工厂方法模式的例子:
首先还是手机:
interface MobilePhone{...}
class IPhone7 implements MobilePhone{...}
class IPhone7s implements MobilePhone{...}
然后还是工厂类,用抽象类或者接口实现,因为它并不具体的生产实例:
abstract class Foxconn {
public MobilePhone producePhone() {};
}
工厂类的生产方法没有具体的创建产品实例,而在它的子类里具体创建:
/**
* 只生产IPhone7手机的车间
*/
class IPhone7Workshop extends Foxconn{
@Override
public MobilePhone producePhone(){
return new IPhone7();
}
}
/**
* 只生产IPhone7s手机的车间
*/
class IPhone7sWorkshop extends Foxconn{
@Override
public MobilePhone producePhone(){
return new IPhone7s();
}
}
这样就解决了简单工厂模式的问题,新增产品必须修改工厂类,而可以直接实现工厂类的子类去生产新的产品。