简单工厂模式(Simple Factory Pattern)又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
简单工厂模式其实不是一个设计模式,反而比较像是一种编程习惯。但由于经常被使用,所以我们先来学习。
用简单工厂模式写的烤鱼店实例类图如下:
客人通过KaoYu类的orderFish()方法来点单,SimpleFishFactory类的orderFish()负责创建不同烤鱼类型,Fish是烤鱼父类,CaoYu,NianYu,JiYu,LuYu是具体实现。
Fish类代码实现:
public class Fish {
String name = "Unknow name";
public String getname(){
return name;
}
}
CaoYu类代码实现:
public class CaoYu extends Fish{
public CaoYu(){
name = "草鱼";
System.out.println("烤"+name);
}
}
NianYu类代码实现:
public class NianYu extends Fish{
public NianYu(){
name = "鲶鱼";
System.out.println("烤"+name);
}
}
JiYu类代码实现:
public class JiYu extends Fish{
public JiYu(){
name = "鲫鱼";
System.out.println("烤"+name);
}
}
LuYu类代码实现:
public class LuYu extends Fish{
public LuYu(){
name = "鲈鱼";
System.out.println("烤"+name);
}
}
SimpleFishFactory类代码实现:
public class SimpleFishFactory {
public Fish createFish(String type){
if (type.equals("CaoYu")) {
return new CaoYu();
}else if (type.equals("NianYu")) {
return new NianYu();
}else if (type.equals("JiYu")) {
return new JiYu();
}else if (type.equals("LuYu")) {
return new LuYu();
}
return null;
}
}
createFish方法根据传进来的不同参数,返回一个对应的对象。
KaoYu类代码实现:
public class KaoYu {
SimpleFishFactory factory;
public KaoYu(SimpleFishFactory factory){
this.factory = factory;
}
public Fish orderFish(String type){
Fish fish;
fish = factory.createFish(type);
System.out.println("我是一条烤"+fish.getname());
return fish;
}
}
KaoYu类传进来一个SimpleFishFactory对象,然后orderFish根据type来返回一个对应的对象。
测试类KaoYuTest代码实现:
public class KaoYuTest {
public static void main(String[] args){
SimpleFishFactory factory = new SimpleFishFactory();
KaoYu kaoYu = new KaoYu(factory);
kaoYu.orderFish("JiYu");
}
}
执行结果:
烤鲫鱼
我是一条烤鲫鱼