随笔 - 40, 文章 - 0, 评论 - 20, 引用 - 0
数据加载中……

23种面向对象的设计模式----Factory method模式


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

<个人观点,仅作参考>

 

posted on 2005-11-13 21:35 月亮 阅读(923) 评论(1)  编辑  收藏

评论

# re: 23种面向对象的设计模式----Factory method模式  回复  更多评论   

疑问:theProduct 私有变量对CarWorker和BusWorker是无效的?
2006-08-11 22:42 | hao

只有注册用户登录后才能发表评论。


网站导航: