工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂方法让类把实例化推延到了子类。
举个例子
//菜色
public interface Food {
void display();
}
//一个菜色
public class Tofu implements Food{
@Override
public void display() {
System.out.println("这是炸豆腐");
}
}
//招牌菜,每当顾客要求做厨师长不会的菜时,这盘菜上去,总能满足顾客要求
public class Beef implements Food{
@Override
public void display() {
System.out.println("这是炒牛肉");
}
}
//餐厅前台
public class Restaurant {
private Food food;
//根据客人要求上对应的菜
//但是前台只负责传递上菜需求与上菜
//做菜由后厨负责
public Food servedFood(String type){
food = SimpleFactory.getFood(type);
return food;
}
}
//餐厅后厨
public class SimpleFactory {
//后厨判断是否能做客户要求的菜,能则做
//不能则做招牌菜(就是这么任性)
public static Food getFood(String type){
if(type.equalsIgnoreCase("doufu")){
return new Tofu();
}else {
return new Beef();
}
}
}
public class Main {
public static void main(String[] args) {
//顾客来到一家餐厅
Restaurant r = new Restaurant();
//要了一份炸豆腐,服务员传达了点餐,不一会儿就上菜了
Food f = r.servedFood("doufu");
//顾客发现确实是点的炸豆腐
f.display();
}
}
UML类图
在这种设计下,后厨无论加什么菜,前台都无需修改。但是同样明显的缺陷是,每当添加一个菜色,在后厨都得增加一个判断是否能做这道菜。这个就是简单工厂模式。
虽然对简单工厂有了大概了解,但是其中的简单工厂与工厂方法之间的区别尚不清晰。