1 工厂方法模式
定义:工厂方法模式又称工厂模式,也叫虚拟构造器(Virtual Constructor)模式或多态工厂(Polymorphic Factory)模式,属于类的创建模式。在工厂方法中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化那个类。
2.1 模式设计原则
依赖抽象,不要依赖具体类。类不知道自己要创建哪一个对象。类用他的子类来指定创建哪个对象。客户需要清楚创建了哪一个对象。
2.2 例子类图
2.3 例子代码
/*
* Mobile.java
* Create on 2009-8-3,10:00
*/
package factory.factorymethod;
/**
* 手机接口
*/
public interface Mobile {
void call();
}
/*
* Nokia.java
* Create on 2009-8-3,,10:02
*/
package factory.factorymethod;
/**
* 具体手机产品,实现接口 <CODE>Mobile</CODE>
*/
public class Nokia implements Mobile{
public void call() {
System.out.println("nokia 手机");
}
}
/*
* Motorola.java
* Create on 2009-8-3,10:01
*/
package factory.factorymethod;
/**
* 具体手机产品,实现接口 <CODE>Mobile</CODE>
*/
public class Motorola implements Mobile{
public void call() {
System.out.println("Motorola 手机");
}
}
/*
* MobileFactory.java
* Create on 2009-8-3,9:59
*/
package factory.factorymethod;
/**
* 手机工厂接口
*/
public interface MobileFactory {
public Mobile produceMobile();
}
/*
* MotorolaFactory.java
* Create on 2009-8-3,10:04
*/
package factory.factorymethod;
/**
* motorola 工厂实现了生产手机的方法,返回motorola 手机。
*/
public class MotorolaFactory implements MobileFactory {
public Mobile produceMobile() {
System.out.print("motorola 工厂制造了");
return new Motorola();
}
}
/*
* NokiaFactory.java
* Create on 2009-8-3,10:04
*/
package factory.factorymethod;
/**
* nokia 工厂实现了生产手机的方法,返回 nokia 手机。
*/
public class NokiaFactory implements MobileFactory {
public Mobile produceMobile() {
System.out.print("nokia 工厂制造了");
return new Nokia();
}
}
/*
* Client.java
* Create on 2009-8-3,19:31
*/
package factory.factorymethod;
/**
* 工厂方法模式(Factory Method Pattern) <br>
* 《深入浅出设计模式》<br>
* <li>定义:<br>
* 工厂方法模式又称工厂模式,也叫虚拟构造器(Virtual Constructor)模式或多态工厂 <br>
* (Polymorphic Factory)模式,属于类的创建模式。<br>
* 在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,<br>
* 这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化那个类。<br>
*<li>应用:<br>
* 1.类不知道自己要创建那一个对象。<br>
* 2.类用它的子类来指定创哪个对象。<br>
* 3.客户需要清楚创建了哪一个对象。<br>
*/
public class Client {
public static void main(String[] args) {
MobileFactory motorolaFactory = new MotorolaFactory();
Mobile motorola = motorolaFactory.produceMobile();
motorola.call();
MobileFactory nokiaFactory = new NokiaFactory();
Mobile nokia = nokiaFactory.produceMobile();
nokia.call();
}
}