Be MySelf                                                    
 

 

日志更新

最新评论

留言板

链接

Blog信息





学习面向对象的设计模式之Factory method模式
haosheng 发表于 2006/8/4 16:49:00


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


阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志
 


发表评论:

    昵称:
    密码:
    主页:
    标题: