简单工厂模式(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;}@Overridepublic void grow() {System.out.println("Apple grow ...");}@Overridepublic void plant() {System.out.println("Apple plant ...");}@Overridepublic 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;}@Overridepublic void grow() {System.out.println("Grape grow ...");}@Overridepublic void plant() {System.out.println("Grape plant ...");}@Overridepublic void harvest() {System.out.println("Grape harvest ...");}}草莓类的源代码:
/** * 草莓 * @author Administrator * */public class Strawberry implements Fruit {@Overridepublic void grow() {System.out.println("Strawberry grow ...");}@Overridepublic void plant() {System.out.println("Strawberry plant ...");}@Overridepublic 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类型,这就是纯正的多态性原则的运用。