一、工厂模式的目的
为创建对象提供过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的
二、优缺点
优点:工厂类是整个模式的关键所在,无需了解对象是如何创建以及如何组织的,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连,违背了单一职责
三、具体实现
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //细节:命名规则类,接口名称都得大写 interface Fruit { //接口中的 public abstract 都是多余的声明,eclipse是发现不了的。 //若是有心人就换编辑器,intellij idea, void eat(); }
class Apple implements Fruit { public void eat() { System.out.println("Apple"); } }
class Orange implements Fruit { public void eat() { System.out.println("Orange"); } }
// 构造工厂类 // 也就是说以后如果我们在添加其他的实例的时候只需要修改工厂类就行了 class Factory { public static Fruit getInstance(String fruitName) { Fruit f = null; if ("Apple".equals(fruitName)) {//这么写是为了避免null.equal(),空指针异常,有人会问这个为什么吗? f = new Apple(); } if ("Orange".equals(fruitName)) { f = new Orange(); } return f; } }
class Hello { public static void main(String[] a) { Fruit f = Factory.getInstance("Orange"); f.eat(); } } |
四、总结
简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。