
//公共接口
public interface IFood {
public void eat();
}
//实现类A
public class Chips implements IFood {
@Override
public void eat() {
System.out.println("吃薯条啦");
}
}
//实现类B
public class Roast implements IFood {
@Override
public void eat() {
System.out.println("吃烤肉呀");
}
}
//关键工厂类
public class KFC {
public IFood getFood(String name) {
switch (name) {
case "chips": {
return new Chips();
}
case "roast": {
return new Roast();
}
default: {
System.out.println("抱歉,没有!");
return null;
}
}
}
}
//测试类
public class SimpleFactoryTest {
public static void main(String[] args) {
KFC kfc = new KFC();
kfc.getFood("chips").eat();
kfc.getFood("roast").eat();
}
}
//结果:
吃薯条啦
吃烤肉呀
优点:将创建对象的工作分离出来,客户端只需要给定部分信息,即可得到对象实例,而不用去了解此对象是经过了哪些处理创建的,实现了结构分离
缺点:一个工厂类融合了各种对象的创建,违背了职责单一原则。当添加新功能时,需要修改工厂类的代码,违背了开闭原则,系统失去灵活性和可维护性。
网友评论