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类创建一个子类,但是这样做的 好处也是显而易见的,会给你系统带来更大的可扩展性和尽量少的修改量,再添加一种产品一种工人的时候,对以前的代码是不必做任何修改的。 |