Factory Method Pattern(工厂方法模式)——莫勇鹏老师

Factory Method Pattern(工厂方法模式)

在工厂方法模式中,父类负责定义建立对象的公共接口,而子类则负责生成具体的对象,这样作的目的是将类的实例化操做延迟到子类中完成,即由子类来决定究竟应该实例化(建立)哪个类。ide

 

工厂方法模式的UML类图spa

 

Product:产品角色对象

定义产品的接口。接口

 

ConcreteProduct:真实的产品ci

实现接口Product类。产品

 

Creator:工厂角色ast

声明工厂方法(FactoryMethod),返回一个产品。class

 

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.      客户须要清楚建立了哪个对象。

相关文章
相关标签/搜索