假如你有一个爱吃樱桃
草莓
芒果
桑葚
的女朋友,总不能想吃樱桃的时候就去种樱桃,想吃桑葚的时候就去种桑葚吧。那有什么好办法去解决这个棘手的问题呢,你可以去承包一个水果工厂
,里面专设樱桃
草莓
芒果
桑葚
四条生产线,想吃哪种水果
,就让工厂生产,一包满足你要求的水果就立马生产出来了。另外如果哪天想吃其他水果了,在水果工厂
里新开生产线就解决了。
以上是简单工厂模式的产生的来源,抽象的说就是,用一个单独的类来做创造实例的过程。
一个简单工厂产生的过程
-
樱桃
草莓
芒果
桑葚
是四种水果
,他们有一个共同的父类水果
<pre>
// 水果抽象类
public abstract class Fruit{
public void sayName();
}
</pre> -
樱桃
草莓
芒果
桑葚
四种具体的水果类
<pre>
// 樱桃
public class Cherry extends Fruit{
@Override
public void sayName(){
System.out.println("樱桃");
}
}
// 草莓
public class Strawberry extends Fruit{
@Override
public void sayName(){
System.out.println("草莓");
}
}
// 芒果
public class Mango extends Fruit{
@Override
public void sayName(){
System.out.println("芒果");
}
}
// 桑葚
public class Mulberry extends Fruit{
@Override
public void sayName(){
System.out.println("桑葚");
}
}
</pre> - 开始建造工厂,工厂只需要有一个返回水果的方法就可以了
<pre>
public class FruitFactory{
public static Fruit produce(String name){
if("樱桃".equals(name)){
return new Cherry();
}
if("草莓".equals(name)){
return new Strawberry();
}
if("芒果".equals(name)){
return new Mango();
}
if("桑葚".equals(name)){
return new Mulberry();
}
return null;
}
}
</pre> - 可以开工生产水果了
<pre>
public class FruitFactoryTest{
public void static main(String[] args){
Fruit cherry = FruitFactory.produce("樱桃");
Fruit strawberry = FruitFactory.produce("草莓");
Fruit mango = FruitFactory.produce("芒果");
Fruit mulberry = FruitFactory.produce("桑葚");
}
}
</pre>
以下是此简单工厂模式的UML图
参考
《大话设计模式》程杰 著