前言
工厂模式最重要的思想:实现创建者和调用者的分离。
OOP七大原则:
- 开闭原则:一个软件的实体应当对扩展开放,对修改关闭
- 依赖倒置原则:要针对接口编程,不要针对实现编程
- 迪米特法则:只与你直接的朋友通信,而避免和陌生人通信
一、简单工厂模式
- 代码如下(示例):
public interface Car {
void name();
}
public class WuLing implements Car{
@Override
public void name() {
System.out.println("五菱宏光!");
}
}
public class CarFactory {
public static Car getCar(String car){
if (car.equals("五菱")){
return new WuLing();
}else if (car.equals("特斯拉")){
return new Tesla();
}else {
return null;
}
}
}
public class Consumer {
public static void main(String[] args) {
Car car1 = CarFactory.getCar("五菱");
Car car2 = CarFactory.getCar("特斯拉");
System.out.println(car1);
System.out.println(car2);
}
}
- 缺点:这种方式,增加一个新的产品,如果你不修改代码,做不到,不能满足开闭原则。
二、工厂方法模式
代码如下(示例):
public interface Car {
void name();
}
public class Tesla implements Car{
@Override
public void name() {
System.out.println("特斯拉!");
}
}
public class WuLing implements Car{
@Override
public void name() {
System.out.println("五菱宏光!");
}
}
public interface CarFactory {
Car getCar();
}
public class TeslaFactory implements CarFactory{
@Override
public Car getCar() {
return new Tesla();
}
}
public class WuLingFactory implements CarFactory{
@Override
public Car getCar() {
return new WuLing();
}
}
public class Consumer {
public static void main(String[] args) {
Car car1 = new WuLingFactory().getCar();
Car car2 = new TeslaFactory().getCar();
System.out.println(car1);
System.out.println(car2);
}
}
缺点:从这里我们可以看出来,虽然他解决了开闭原则,但是还有一个很大的缺点就是,没增加一个实例就要生成两个类,代码量多。从上面就可以看出,比简单工厂模式多了几个类。
三、抽象工厂模式
1.概述
- 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
2.代码
- 详细代码
- 链接:https://pan.baidu.com/s/1CLwxPEXZdPEHvR1odNGz1Q
- 提取码:vqbb
3.优缺点
- 优点
- 具体产品在应用层的代码隔离,无需关心创建的细节
- 将一个系列的产品统一到一起创建
- 缺点
- 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难
- 增加了系统的抽象性和理解难度
总结
- 根据设计原则:工厂方法模式
- 根据实际业务:简单工厂模式