简介
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,由于工厂类的方法大多数是静态的,又叫静态工厂方法模式(Static FactoryMethod Pattern),它通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
代码实现
1 首先创建一个接口 (car) 有一个 跑的功能
package com.guxiang.factory.simplefactory;
public interface Car {
void run();
}
2 宝马和奔驰两辆豪车分别实现了这个car接口
public class BWM implements Car{
public void run() {
System.out.println("宝马在路上飞奔");
}
}
public class Benz implements Car {
public void run() {
System.out.println("奔驰在路上飞奔");
}
}
如果是不使用工厂设计模式,那么代码很简单
public class NoFactory {
public static void main(String[] args) {
Car c1 = new Benz();
Car c2 = new BWM();
c1.run();
c2.run();
}
}
相应的uml类图如下
如图,我们可以看见 它虽然代码相对简洁 但是却与3个类发生了关系 如果产品种类加多 那么就会与更多类发生关系 ,违法了 迪米特法则
下面介绍使用简单工厂设计模式的方法
简单工厂有两种方式实现
第一种
public class CarFactory {
public static Car createCar( String type) {
if ("宝马".equals(type)) {
return new BWM();
}else if ("奔驰".equals(type)) {
return new Benz();
}else {
return null;
}
}
}
第二种
public class CarFactory2 {
public static Car createBenz() {
return new Benz();
}
public static Car createBWM() {
return new BWM();
}
}
第一种的调用方式如下
public class HaveFactory {
public static void main(String[] args) {
Car car1 = CarFactory.createCar("奔驰");
Car car2 = CarFactory.createCar("宝马");
car1.run();
car2.run();
}
}
第二种的调用方式如下
public class HaveFactory {
public static void main(String[] args) {
Car car1 = CarFactory2.createBenz();
Car car2 = CarFactory2.createBWM();
car1.run();
car2.run();
}
}
他们的UML类图实现如下
可以发现,使用简单工厂,那么无论生产多少种类的汽车 我们都仅仅只需要和两个类发生关系。这样更难体现面向对象的好处。