简单工厂模式(Simple Factory)

[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]

/**
* 水果
* @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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值