一、简单工厂模式
工厂模式主要的目的是实现 创建者和调用者的分类
1.1 核心本质
- 实例化对象,用工厂方法代替
new
操作 - 选择实现类、创建对象统一管理和控制。从而使调用者跟实现类解耦
1.2 工厂模式的分类
分类 | 描述 |
---|---|
简单工厂模式 |
用来生产同一等级结构中的任意产品,对于增加新的产品,需要修改代码 |
工厂方法模式 |
用来生产同一等级结构中的固定产品。支持增加任意产品 |
抽象工厂模式 |
用来生产不同产品族的全部产品。对于增加新的产品,无能为力,支持增加产品族 |
1.3 面向对象设计的一些基本原则
原则 | 描述 |
---|---|
OCP 开闭原则,Open-Closed Principle) |
一个软件的实体应对对扩展开放,对修改关闭 |
DIP (依赖倒转原则,Dependence Inversion Principle) |
针对接口编程,不要针对实现编程 |
LoD (迪米特法则,Law of Demeter) |
只与你直接的朋友通信,而避免和陌生人通信 |
1.3 简单工厂模式
简单工厂模式也叫做静态工厂模式,就是一个工厂类一般是使用静态方法, 通过接受不同的参数返回不同的实例对象
对于新增加的产品,需要修改代码,所以是扩展是要修改已有的代码,当然违背了关闭原则
1.4 代码示例
案例描述:通过工厂方法来生成汽车。
//定义接口
public interface Car {
public void run();
}
//接口的一个实现类
public class Byd implements Car {
@Override
public void run() {
System.out.println("Byd的车在running");
}
}
//接口的一个实现类
public class Audi implements Car{
public void run() {
System.out.println("Audi的车在running");
}
}
//简单工厂/ 静态工厂模式
public class CarFactory {
public static Car createCar(String car){ // 设置成为静态的。这样不依靠对象,而是通过类直接调用
if("奥迪".equals(car)){
return new Audi();
}else if ("比亚迪".equals(car)){
return new Byd();
}
else {
return null; // 可以继续扩展需要添加的车的类型。
// 是不满足开闭原则(扩展开放,对修改关闭)
}
}
}
// 静态工厂的另一种方式
class CarFactory1 {
public static Car createAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}
//客户端的使用
public class Client{
public static void main(String[] args) { // 调用者,需要关联的东西太多。
// Car c1 = new Audi();
// Car c2 = new Byd();
// c1.run();
// c2.run();
// 简单工厂模式
// 通过多增加一个类,实现了更加详细的分工。
Car c1 = CarFactory.createCar("奥迪");
Car c2 = CarFactory.createCar("比亚迪");
Car c3 = CarFactory1.createAudi();
Car c4 = CarFactory1.createByd();
c1.run();
c2.run();
c3.run();
c4.run();
}
}
参看
高淇三百集视频