[color=brown][size=large]简单工厂模式又称静态工厂方法模式(Static Factory Method Pattern),是不同工厂方法模式的一个特殊实现。
简单工厂模式的引进
水果接口规定出所有的水果必须实现的接口,包括任何水果类必须具备的方法:种植plant(),生长grow(),收获harvest().如下图:[/size][/color]
[img]http://dl.iteye.com/upload/attachment/0067/8516/139230e8-7193-3808-81c3-dfc1df3dfde7.jpg[/img]
[size=large]水果接口源代码:[/size]
[size=large]苹果类的源代码:[/size]
[size=large]葡萄类的源代码:[/size]
[size=large]草莓类的源代码:[/size]
园丁类的源代码:
[color=brown][size=large]
简单工厂模式的结构:
简单工厂根据传入的参量决定创建哪一类的产品的实例,如下图:[/size][/color]
[img]http://dl.iteye.com/upload/attachment/0068/0363/0e2b17b4-629e-3840-a65b-8114ba8fb5ac.png[/img]
[size=large][color=brown]简单工厂模式涉及到工厂角色,抽象产品角色以及具体产品角色等三类角色:
1)工厂类角色(Creator)
2)抽象产品角色(Product)
3)具体产品角色(ConcreteProduct)
简单工厂模式在Java中的运用:
DateFormat与简单工厂模式:
1)DateFormat本身是一个抽象类,但是它提供很多静态工厂方法,
[/color][/size]
[color=brown][size=large]2)getTimeInstance并没有直接调用调用DateFormat的构造方法,而是返回DateFormat的具体子类SimpleDateFormat,而getTimeInstance方法返回SimpleDateFormat的实例,并且仅它声明为DateFormat类型,这就是纯正的多态性原则的运用。[/size][/color]
简单工厂模式的引进
水果接口规定出所有的水果必须实现的接口,包括任何水果类必须具备的方法:种植plant(),生长grow(),收获harvest().如下图:[/size][/color]
[img]http://dl.iteye.com/upload/attachment/0067/8516/139230e8-7193-3808-81c3-dfc1df3dfde7.jpg[/img]
[size=large]水果接口源代码:[/size]
/**
* 水果
* @author Administrator
*
*/
public interface Fruit {
//生长
void grow();
//种植
void plant();
//收获
void harvest();
}
[size=large]苹果类的源代码:[/size]
/**
* 苹果
* @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 ...");
}
}
[size=large]葡萄类的源代码:[/size]
/**
* 葡萄
* @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 ...");
}
}
[size=large]草莓类的源代码:[/size]
/**
* 草莓
* @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();
}
}
[color=brown][size=large]
简单工厂模式的结构:
简单工厂根据传入的参量决定创建哪一类的产品的实例,如下图:[/size][/color]
[img]http://dl.iteye.com/upload/attachment/0068/0363/0e2b17b4-629e-3840-a65b-8114ba8fb5ac.png[/img]
[size=large][color=brown]简单工厂模式涉及到工厂角色,抽象产品角色以及具体产品角色等三类角色:
1)工厂类角色(Creator)
2)抽象产品角色(Product)
3)具体产品角色(ConcreteProduct)
简单工厂模式在Java中的运用:
DateFormat与简单工厂模式:
1)DateFormat本身是一个抽象类,但是它提供很多静态工厂方法,
[/color][/size]
public final static DateFormat getTimeInstance();
public final static DateFormat getTimeInstance(int style);
public final static DateFormat getTimeInstance(int style,Locale aLocale);
.....
[color=brown][size=large]2)getTimeInstance并没有直接调用调用DateFormat的构造方法,而是返回DateFormat的具体子类SimpleDateFormat,而getTimeInstance方法返回SimpleDateFormat的实例,并且仅它声明为DateFormat类型,这就是纯正的多态性原则的运用。[/size][/color]