设计模式-工厂模式

核心:实现了创建者和调用者的分离,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种类型的工厂模式:
1.简单工厂(使用较多):又叫静态工厂模式,就是工厂类一般是使用静态方法,通过不同的方法(或是通过传递不同的参数)来返回不同的对象实例;
2.工厂方法:为了避免简单工厂模式的缺点,不完全满足OCP(开闭原则)。工厂方法模式和简单工厂模式最大的不同:简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。根据设计理论建议:工厂方法模式,但实际上,我们一般都用简单工厂模式
3.抽象工厂:用来生产不同产品族的全部产品:在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式;

不使用工厂模式的情况:

1
2
3
4
5
6
public class Audi implements Car{
@Override
public void run() {
System.out.println("Audi跑!!!");
}
}
1
2
3
4
5
6
public class Byd implements Car{
@Override
public void run() {
System.out.println("Byd跑!!!");
}
}
1
2
3
4
5
6
7
8
public class test01 { //调用者
public static void main(String[] args) {
Car c1 = new Audi();
Car c2 = new Byd();
c1.run();
c2.run();
}
}

简单工厂:

1
2
3
4
5
6
7
8
public class CarFactory {
public static Car createAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}
1
2
3
4
5
6
7
8
public class test01 {//调用者
public static void main(String[] args) {
Car car1 = CarFactory.createAudi();
Car car2 = CarFactory.createByd();
car1.run();
car2.run();
}
}

工厂方法:
增加两个实现类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public interface CarFactory {
Car createCar();
}

public class AudiFactory implements CarFactory{
@Override
public Car createCar() {
return new Audi();
}
}

public class BydFactory implements CarFactory{
@Override
public Car createCar() {
return new Byd();
}
}
1
2
3
4
5
6
7
8
public class test01 {//调用者
public static void main(String[] args) {
Car car1 = new AudiFactory().createCar();
Car car2 = new BydFactory().createCar();
car1.run();
car2.run();
}
}

抽象工厂: