1、简介
简单工厂模式是一个对象创建型模式,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类,它使得一个类的实例化延迟到了子类。
2、使用场景
为什么要使用工厂模式,它能帮助解决什么问题?面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情了。使用工厂模式,能够将创建实例和使用实例分开,封装了使用者将得到那些具体类的信息,并且隐藏了这些类的实例是如何被创建和放在一起的。
3、类图
4、实例
先看看Product接口:
package simpleFactory;
public interface Product {
public void doSth();
}
再看看和他关联的具体的类:
package simpleFactory;
public class ConcreteProduct1 implements Product {
public void doSth(){
System.out.print("this is product1");
}
}
package simpleFactory;
public class ConcreteProduct2 implements Product {
public void doSth(){
System.out.print("this is product2");
}
}
package simpleFactory;
public class ConcreteProduct3 implements Product {
public void doSth(){
System.out.print("this is product3");
}
}
package simpleFactory;
public class ConcreteProduct4 implements Product {
public void doSth(){
System.out.print("this is product4");
}
}
最后是工厂方法的核心类:
package simpleFactory;
public class Creator {
public static Product productFactory(int which) {
switch(which){
case 1:
return new ConcreteProduct1();
break;
case 2:
return new ConcreteProduct2();
break;
case 3:
return new ConcreteProduct3();
break;
case 4:
return new ConcreteProduct4();
break;
default:
return null;
}
}
}
5、优缺点
优点如下:
客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。
缺点也很明显:
当产品修改时,工厂类也要做相应的修改。有点违背了开—闭原则。