简单工厂模式(Simple Factory)

简单工厂模式又称静态工厂方法模式(Static Factory Method Pattern),是不同工厂方法模式的一个特殊实现。
简单工厂模式的引进
水果接口规定出所有的水果必须实现的接口,包括任何水果类必须具备的方法:种植plant(),生长grow(),收获harvest().如下图:


水果接口源代码:
/**
 * 水果
 * @author Administrator
 *
 */
public interface Fruit {
	//生长
	void grow();
	//种植
	void plant();
	//收获
	void harvest();

}


苹果类的源代码:
/**
 * 苹果
 * @author Administrator
 *
 */
public class Apple implements Fruit{
	
	private int treeAge;

	public int getTreeAge() {
		return treeAge;
	}

	public void setTreeAge(int treeAge) {
		this.treeAge = treeAge;
	}

	@Override
	public void grow() {
		System.out.println("Apple grow ...");
	}

	@Override
	public void plant() {
		System.out.println("Apple plant ...");
	}

	@Override
	public void harvest() {
		System.out.println("Apple harvest ...");
	}

}


葡萄类的源代码:
/**
 * 葡萄
 * @author Administrator
 *
 */
public class Grape implements Fruit {
	//是否有籽
	private boolean seedless;

	public boolean isSeedless() {
		return seedless;
	}

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

	@Override
	public void grow() {
		System.out.println("Grape grow ...");
	}

	@Override
	public void plant() {
		System.out.println("Grape plant ...");
	}

	@Override
	public void harvest() {
		System.out.println("Grape harvest ...");
	}

}

草莓类的源代码:
/**
 * 草莓
 * @author Administrator
 *
 */
public class Strawberry implements Fruit {

	@Override
	public void grow() {
		System.out.println("Strawberry grow ...");
	}

	@Override
	public void plant() {
		System.out.println("Strawberry plant ...");

	}

	@Override
	public void harvest() {
		System.out.println("Strawberry harvest ...");

	}

}

园丁类的源代码:
public class FruitGardener {
	
	/**
	 * 静态工厂方法
	 * @param which
	 * @return
	 */
	public static Fruit factory(String which){
		if(which.equalsIgnoreCase("apple")){
			return new Apple();
		}
		else if(which.equalsIgnoreCase("grape")){
			return new Grape();
		}
		else if(which.equalsIgnoreCase("strawberry")){
			return new Strawberry();
		}else{
			return null;
		}
	}
	public static void main(String[] args) {
		FruitGardener.factory("apple").grow();
		FruitGardener.factory("grape").plant();
		FruitGardener.factory("strawberry").harvest();
		
	}

}



简单工厂模式的结构:
简单工厂根据传入的参量决定创建哪一类的产品的实例,如下图:




简单工厂模式涉及到工厂角色,抽象产品角色以及具体产品角色等三类角色:
1)工厂类角色(Creator)
2)抽象产品角色(Product)
3)具体产品角色(ConcreteProduct)

简单工厂模式在Java中的运用:
DateFormat与简单工厂模式:
1)DateFormat本身是一个抽象类,但是它提供很多静态工厂方法,

 
public final static DateFormat getTimeInstance();
  public final static DateFormat getTimeInstance(int style);
  public final static DateFormat getTimeInstance(int style,Locale aLocale);
  .....

2)getTimeInstance并没有直接调用调用DateFormat的构造方法,而是返回DateFormat的具体子类SimpleDateFormat,而getTimeInstance方法返回SimpleDateFormat的实例,并且仅它声明为DateFormat类型,这就是纯正的多态性原则的运用。

猜你喜欢

转载自openopenjava.iteye.com/blog/1521044