简单工厂的优点:
- 把具体产品的类型从客户端代码中解耦处理。
- 服务器端,如果修改了具体产品的类名,客户端也不知道(将Rise的类名改为Rise2 客户端的代码不需要修改)符合"面向接口编程"的思想。
简单工厂的缺点:
- 如果具体产品特别多,则简单工厂就会变得十分臃肿。比如有100个具体产品,则需要写100个case。
- 最重要的是不符合ocp原则(开闭原则),客户端需要拓展具体产品时,要修改简单工厂的代码。
package com.fjh.factory.simplefactory;
interface Food{
void eat();
}
class Hamburger implements Food{
@Override
public void eat() {
System.out.println("制造汉堡");
}
}
class Rise implements Food{
@Override
public void eat() {
System.out.println("制造饭");
}
}
class FoodFactory{
public static Food productFood(int i){
Food food = null;
switch (i){
case 1:
food = new Hamburger();
break;
case 2:
food = new Rise();
break;
default:
break;
}
return food;
}
}
public class SimpleFactoryTest {
public static void main(String[] args){
Food food = FoodFactory.productFood(2);//可以将产品与对应编号写成枚举类。
food.eat();
}
}