posts - 0,  comments - 3,  trackbacks - 0

上一篇中学习了简单工厂模式,在简单工厂模式(Simple Factory Pattern)中,只是有限的支持了开-闭原则(一个系统的设计要求允许系统在无修改的情况下,扩展其功能)。当我们需要增加一种产品时,我们就不得不做一件很头疼的事:修改FruitsGrower类(creator),以使他能生产出新增的产品。而接下来的工厂方法模式则是体现了java的多态性,完全符合了开闭原则。工厂方法模式的实现依赖于工厂角色和产品角色的多态性。当在某些特殊情况下,这个模式可以退化,例如退化成简单工厂模式,特征就是多态性的丧失。

继续水果为例:首先UML图如下:

源代码:

接口:FruitFactory

public interface FruitFactory {
 public Fruits factory();
}

接口:Fruits

public interface Fruits {
 public void grow();
 public void plant();
 public void harvest();
 
}

类:AppleFactory

public class AppleFactory implements FruitFactory {

 public Fruits factory() {
  
  return new Apple();
 }

}

类:GrapeFactory

public class GrapeFactory implements FruitFactory {

 public Fruits factory() {
  // TODO 自动生成方法存根
  return new Grape();
 }

}

类:Apple

public class Apple implements Fruits {

 /*
  * 苹果的特有属性。苹果数的树龄
  */
 private int treeage;
 public int getTreeage() {
  return treeage;
 }

 public void setTreeage(int treeage) {
  this.treeage = treeage;
 }

 public void grow() {
  System.out.println("苹果的生长方法");

 }

 public void harvest() {
  System.out.println("苹果的收获方法");

 }

 public void plant() {
  System.out.println("苹果的种植方法");

 }


}

类:Grape

public class Grape implements Fruits {

 public boolean seedless;
 public void grow() {
  System.out.println("葡萄的生长");

 }

 public void harvest() {
  System.out.println("葡萄的收获");

 }

 public void plant() {
  System.out.println("葡萄的种植");

 }

 public boolean isSeedless() {
  return seedless;
 }

 public void setSeedless(boolean seedless) {
  this.seedless = seedless;
 }

}

测试方法:Test.java

public static void main(String args[])
 {
  FruitFactory create; //声明工厂
  Fruits product; //声明产品
  create=new AppleFactory();
   product=create.factory();
    product.grow(); //调用产品的方法
 } 

 工厂方法返回的应该是抽象类型,而不是具体类型,只有这样,才能保证多态性。当需要一个新产品时,只要创建一个产品类,一个工厂类,并实现相应的接口就OK。

工厂方法模式在jDK API中的 应用:

 工厂方法模式在JDK中的应用到处可见,例如:Collection

所有的实现Collection的类必须实现iteratror()方法,返回一个具体的Iterator类
posted on 2007-07-01 10:17 李桢 阅读(183) 评论(0)  编辑  收藏 所属分类: java设计模式
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿(1)

文章分类

文章档案

搜索

  •  

最新评论