一、工厂模式概述
工厂模式:将各种对象的创建过程单独提取出来,交给工厂类负责创建管理。谁想要什么产品,直接找工厂要使用的对象。实现创建者和调用者分离。
例如:我们要买一台车,在代码里的实现是new创建,这就相当于我们自己造车了,而工厂模式思想是你要什么车告诉我,我给你车,不要自己造车。
二、工厂模式的三种类型
工厂模式主要有三种类型:简单工厂、工厂方法,抽象方法。
三、简单工厂代码实现
大家可以先了解下体系然后看代码,然后再回来看体系。
1.Car接口
public interface Car {
//汽车名字
void name();
}
2.奥迪汽车类
public class Audi implements Car{
@Override
public void name() {
System.out.println("奥迪四个圈");
}
}
3.奔驰汽车类
public class Benz implements Car {
@Override
public void name() {
System.out.println("奔驰");
}
}
4.汽车工厂类(即创建者)
public class CarFactory {
public static Car getCar(String car){
//此处选择Switch语句。也可以使用if判断语句。
switch (car){
case "benz":
return new Benz();
case "audi":
return new Audi();
default:
return null;
}
}
}
5.测试类(即调用者)
大家观察以下代码发现我们并不需要去创建对象,需要哪个对象我们直接从工厂里去拿就可以了。
public class MyTest {
public static void main(String[] args) {
Car audi = CarFactory.getCar("audi");
audi.name();
}
}
思考题:如果我们在加一种车Volvo沃尔沃,那么我们需要创建Volvo实现接口,重写方法,这些是必须写的,最重要的还要在车工厂添加条件语句判断创建对象,这样我们就违背了开闭原则,对拓展开放,对修改关闭。
所以我们来了解下面一种方法:工厂方法。这个比较费事。
四、工厂方法代码实现
优化简单工厂代码,就是上面的代码。
1.创建汽车总制造工厂接口,大家这么理解。后面为每个汽车再创建单个汽车工厂。
public interface CarFactory {
Car getCar();
}
2.创建奥迪汽车工厂 实现汽车总制造出接口 创建奥迪对象
public class AudiFactory implements CarFactory {
@Override
public Car getCar() {
return new Audi();
}
}
3.创建奔驰汽车类工厂。与上面一样。
4.现在我们要添加Volvo汽车,创建汽车,实现Car接口,然后创建Volvo工厂,实现总制造厂接口。
5.测试类
public class MyTest {
public static void main(String[] args) {
//比如我们要奥迪汽车,直接去找奥迪工厂即可
Car audi = new AudiFactory().getCar();
audi.name();
}
}
现在我们多次工厂多一个产品,我们不需要去修改源代码,只需要增加工厂类即可。