易学设计模式七 简单工厂(Simple Factory)

简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式,是由一个工厂对象决定创建出哪一种产品类的实例。

本例子一共有七个类,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

猜你喜欢

转载自jiaozhiguang-126-com.iteye.com/blog/1669770