简单工厂模式又称静态工厂方法模式(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类型,这就是纯正的多态性原则的运用。