简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式,是由一个工厂对象决定创建出哪一种产品类的实例。
本例子一共有七个类,Fruit是抽象类,Apple,Grape,Strawberry是继承了Fruit的具体类,FruitGardener是提供工厂方法(factory)的类,BadFruitException是异常类,Client是测试类。
抽象类 或者 接口
具体类 苹果
具体类 葡萄
具体类 草莓
园丁来了
异常类
测试类
输出结果
Apple has been planted
Apple is growing
Apple has been havested
Strawberry has been planted
本例子一共有七个类,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