前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里:
Java 设计模式之单例模式
那么今天就把学习的工厂模式记录下来
- 工厂模式:
实现了创建者和调用者的分离
详细分类:简单工厂模式、工厂方法模式、抽象工厂模式
工厂模式完全遵守了面向对象设计的基本原则 即:
- 开闭原则:一个软件的实体应该对拓展开放,对修改关闭。
- 依赖倒转原则:要针对接口编程,不要针对实现编程。
- 迪米特法则:只与你直接的朋友通信,不与陌生人通信。
首先学习简单工厂模式
先举个小例子,假如我们生产两种汽车,分别是奥迪和比亚迪,常规情况下,我们直接new 一个奥迪或者比亚迪
public class AudiCar implements Car{
@Override
public void create() {
System.out.println("生产奥迪汽车");
}
}
public interface Car {
void create();
}
写个测试类
public class FactoryClient1 {
public static void main(String[] args) {
AudiCar audiCar = new AudiCar();
BydCar bydCar = new BydCar();
audiCar.create();
bydCar.create();
}
}
打印结果:
生产奥迪汽车
生产比亚迪汽车
但是这样我们每次都要修改我们的客户端,用户是不用知道它是怎么具体生产的,所以我们将它们装进一个工厂里,
public class CarFactorySimple {
public static Car createCar(String type) {
if ("audi".equals(type)) {
return new AudiCar();
} else if ("byd".equals(type)) {
return new BydCar();
}
return null;
}
}
还有一种写法
public class CarFactorySimple {
public static Car createAudiCar() {
return new AudiCar();
}
public static Car createBydCar() {
return new BydCar();
}
}
由以上可见,简单工厂对于扩展产品方面就显得不是很好了,我们一直要对其进行修改,所以:
- 简单工厂模式一般也称作静态工厂模式,就是工厂方法一般采取静态方法的模式,通过接受不同参数来生产不同的对象。
- 对于增加新产品显得无能为力,不修改代码不能完成扩展。
违反了我们的开闭原则。如何避免这种问题呢,这就是下面学习的工厂方法模式了。
关于工厂方法模式,请跳转Java 设计模式之工厂模式(工厂方法模式)
关于简单工厂模式,欢迎朋友们一起学习讨论。