1. 什么是简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。但是严格来说,简单工厂模式不是设计模式,它更像是一种编程习惯。
2. 简单工厂模式的结构
(请允许我无耻的偷了百度百科的图)
从上面的类图可以看出,简单工厂模式一共有三种类:
1、抽象产品接口IProduct。
2、具体的产品类Product。
3、工厂类Creator。
3、示例代码
简单工厂模式很简单,下面直接上示例代码。
抽象产品接口:
//披萨接口
public interface Pizza {
//切片
void cut();
//装盒
void box();
}
具体的产品类:
//这是一个芝士披萨
public class CheesePizza implements Pizza{
@Override
public void cut() {
System.out.println("CheesePizza:cut");
}
@Override
public void box() {
System.out.println("CheesePizza:box");
}
}
//蛤蜊披萨
public class ClamPizza implements Pizza {
@Override
public void cut() {
System.out.println("ClamPizza:cut");
}
@Override
public void box() {
System.out.println("ClamPizza:box");
}
}
工厂类Creator:
public class SimplePizzaFactory {
public static Pizza factory(String type){
Pizza pizza = null;
if (type == null) {
return pizza;
}else if (type.equals("cheese")){
return new CheesePizza();
}else if (type.equals("clam")){
return new ClamPizza();
}else {
return pizza;
}
}
}
测试类:
public class Client {
public static void main(String[] args){
Pizza cheese = SimplePizzaFactory.factory("cheese");
Pizza clam = SimplePizzaFactory.factory("clam");
cheese.box();
clam.cut();
}
}
输出:
4、优缺点
到此,简单工厂模式就结束了,是不是很简单哪。那么如此简单的模式到底有什么用哪?
优点:简单工厂模式将创建的代码封装成一个,当以后改变只需要修改这个类就行了。在客户类中,我们删除了具体的实例化过程,这就是解耦啊。
缺点:试想一下这种情况,如果我现在有10个具体的披萨类,那是不是要在工程类里面写10个else if哪,简单工厂模式把所有的处理逻辑都放在了这个工厂类中,使得这个类承担了过大的责任,如果哪天挂了,那么对整个系统都会有很大的影响。