本例子一共有七个类,Fruit是抽象类,Apple,Grape,Strawberry是继承了Fruit的具体类,FruitGardener是提供工厂方法(factory)的类,BadFruitException是异常类,Client是测试类。
抽象类 或者 接口
public abstract class Fruit { public abstract void plant(); //种植 public abstract void grow(); //生长 public abstract void harvest();//收获 public void log(String msg) { System.out.println(msg); } }
具体类 苹果
public class Apple extends Fruit { private int treeAge; @Override public void grow() { log("Apple is growing"); } @Override public void harvest() { log("Apple has been havested"); } @Override public void plant() { log("Apple has been planted"); } public int getTreeAge() { return treeAge; } public void setTreeAge(int treeAge) { this.treeAge = treeAge; } }
具体类 葡萄
public class Grape extends Fruit { private boolean seedless; @Override public void grow() { log("Grape is growing"); } @Override public void harvest() { log("Grape has been harvested"); } @Override public void plant() { log("Grape has been planted"); } public boolean isSeedless() { return seedless; } public void setSeedless(boolean seedless) { this.seedless = seedless; } }
具体类 草莓
public class Strawberry extends Fruit { @Override public void grow() { log("Strawberry is growing"); } @Override public void harvest() { log("Strawberry has been harvested"); } @Override public void plant() { log("Strawberry has been planted"); } }
园丁来了
public class FruitGardener { public static Fruit factory(String which) throws BadFruitException { if(which.equalsIgnoreCase("apple")) { return new Apple(); } else if(which.equalsIgnoreCase("Grape")) { return new Grape(); } else if(which.equalsIgnoreCase("Strawberry")) { return new Strawberry(); } else { throw new BadFruitException("Bad fruit request"); } } }
异常类
public class BadFruitException extends Exception { public BadFruitException(String msg) { super(msg); } }
测试类
public class Client { public static void main(String[] args) throws BadFruitException { Fruit apple = FruitGardener.factory("apple"); apple.plant(); apple.grow(); apple.harvest(); Fruit strawberry = FruitGardener.factory("strawberry"); strawberry.plant(); } }
输出结果
Apple has been planted
Apple is growing
Apple has been havested
Strawberry has been planted