2019独角兽企业重金招聘Python工程师标准>>>
Factory Method Pattern(工厂方法模式)
在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。
工厂方法模式的UML类图
Product:产品角色
定义产品的接口。
ConcreteProduct:真实的产品
实现接口Product类。
Creator:工厂角色
声明工厂方法(FactoryMethod),返回一个产品。
ConcreteCreator:真实的工厂
实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例。
Java实例——扩展了的手机工厂
手机接口:
public interface Mobile {
public void call();
}
手机工厂接口:
public interface MobileFactory {
public Mobile produceMobile();
}
摩托罗拉手机实现手机接口:
public class Motorola implements Mobile{
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("摩托罗拉手机");
}
}
诺基亚手机实现手机接口:
public class Nokia implements Mobile{
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("诺基亚手机");
}
}
摩托罗拉工厂实现了生产手机的方法,返回摩托罗拉手机:
public class MotorolaFactory implements MobileFactory{
@Override
public Mobile produceMobile() {
// TODO Auto-generated method stub
System.out.print("摩托罗拉工厂制造了");
return new Motorola();
}
}
诺基亚工厂实现了生产手机的方法,返回诺基亚手机:
public class NokiaFactory implements MobileFactory{
@Override
public Mobile produceMobile() {
// TODO Auto-generated method stub
System.out.print("诺基亚工厂制造了");
return new Nokia();
}
}
客户程序:
public class Client {
public static void main(String args[]){
MobileFactory mf;
Mobile m;
mf=new MotorolaFactory();
m=mf.produceMobile();
m.call();
mf=new NokiaFactory();
m=mf.produceMobile();
m.call();
}
}
输出结果:
摩托罗拉工厂制造了摩托罗拉手机
诺基亚工厂制造了诺基亚手机
应用情景:
1. 类不知道自己要创建哪一个对象。
2. 类用它的子类来指定创建哪个对象。
3. 客户需要清楚创建了哪一个对象。