Factory method,工厂方法模式,定义一个用于创建对象的接口,让字类决定实例化哪一个类。也就是使一个类的实例化延迟到其子类,提供一种方法使对象创建变得多态。
下面是我写的一个例子,如有两种工人,car worker和bus worker,所生成的产品分别是car 和 bus,我按照Factory method 的实现如下:
--先定义car 和 bus 的父类,都是一种产品
package Factory;
public class Product {
public void whoami(){
System.out.println("I am a product!");
}
}
--Car 类
package Factory;
public class Car extends Product {
public Car() {
}
public void whoami(){
System.out.println("I am a car!");
}
}
--Bus 类
package Factory;
public class Bus extends Product {
public Bus() {
}
public void whoami(){
System.out.println("I am a bus!");
}
}
--定义CarWorker和BusWorker的父类 worker
package Factory;
public abstract class Worker {
private Product theProduct;
public abstract Product createProduct();
public void work(){
theProduct = createProduct();
}
public void showMessage(){
this.theProduct.whoami();
}
}
--Carworker
package Factory;
public class CarWorker extends Worker {
public Product createProduct(){
return new Car();
}
}
--BusWorker
package Factory;
public class BusWorker extends Worker {
public Product createProduct(){
return new Bus();
}
}
--下面看看具体的调用
package Factory;
public class TestAll {
public static void main(String [] argv){
Worker worker = new CarWorker();
worker.work();
worker.showMessage();
Worker worker1 = new BusWorker();
worker1.work();
worker1.showMessage();
}
}
可以看到虽然这样实现有一些麻烦,如新加一种产品时,就必须从Product类创建一个子类,但是这样做的
好处也是显而易见的,会给你系统带来更大的可扩展性和尽量少的修改量,再添加一种产品一种工人的时候,对以前的代码是不必做任何修改的。
<个人观点,仅作参考>