简单工厂
* 一个抽象产品(接口),里面有提供的方法
* 多个 产品(类) 实现 抽象产品
* 一个工厂类 ,用于创建 各个具体的产品(类)
interface Food {
public void eat();
}
class Rice implements Food {
@Override
public void eat() {
System.out.println("吃米饭");
}
}
class CodeNodle implements Food {
@Override
public void eat() {
System.out.println("吃凉皮");
}
}
//设计一个简单的工厂模式
class SimpleFac {
//返回各种工厂
public static Food getFood(int n) {
Food food = null;
switch (n) {
case 1:
food = new CodeNodle();
break;
case 2:
food = new Rice();
break;
}
return food;
}
}
优点:
* 将 创建对象的权力交给工厂去实现
#缺点:
* 如果 具体的类特别多,那么工厂中的switch分支 就会很大
* 使用方(客户端)要记住与提供方(服务端)的映射关系
* 最重要的是:新的需求来了: 客户端(使用方要重新写新的代码)破坏了 “开闭原则”
*
#客户端 和 服务端的代码并不是同一个人写的 ,客户端并不知到服务具体类的方法是什么。