论坛首页 入门技术论坛

可复用面向对象编程——FACTORY METHOD(工厂方法)

浏览 1647 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-26   最后修改:2010-01-26

1.诠释

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

 

2.实用范围
• 当一个类不知道它所必须创建的对象的类的时候。
• 当一个类希望由它的子类来指定它所创建的对象的时候。
• 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类
是代理者这一信息局部化的时候。

 

3.好处

• 工厂方法不再将与特定应用有关的类绑定到你的代码中。
• 客户无论如何必须创建C r e a t o r的子类时,创建子类也是可行的。
• 为子类提供挂钩

•  连接平行的类层次 

 

4.实现

public interface Fruit { 

  void plant();  //水果是被种植的 

  void enableEat();  //水果能吃 

} 

public class Apple implements Fruit{ 

  public void plant(){ 

    System.out.println("种苹果!"); 

  } 

  public void enableEat(){ 

    System.out.println("苹果好吃!"); 

  } 

} 

public class Grape implements Fruit{ 

  public void plant(){ 

    System.out.println("种葡萄!"); 

  } 

  public void enableEat(){ 

    System.out.println("葡萄好吃!"); 

  } 

} 

public class Pear implements Fruit{ 

  public void plant(){ 

    System.out.println("种鸭梨!"); 

  } 

  public void enableEat(){ 

    System.out.println("鸭梨好吃!"); 

  } 

} 

public interface BuyFruit{ 

  public Fruit buyFruit();   //定义买水果这一过程 

} 

public class BuyApple implements BuyFruit{ 

  public Fruit buyFruit(){ 

    return new Apple();  //返回苹果实例 

} 

} 

public class BuyPear implements BuyFruit{ 

  public Fruit BuyPear (){ 

    return new Pear();  //返回鸭梨实例 

} 

} 

public class BuyGrape implements BuyFruit{ 

  public Fruit BuyGrape (){ 

    return new Grape ();  //返回葡萄实例 

} 

} 

public class FruitTest { 

  public static void  main(String args[]){ 

    BuyApple buy = new BuyApple(); //开始买水果这个过程 

    buy.buyFruit().enableEat();      //调用苹果的enableEat()方法 

  } 

} 

 

 

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics