设计模式(2)-- 工厂模式
2022-02-24 本文已影响0人
MikeShine
1. 写在前面
我们首先看一下创建型结构模式。
首先学习一下工厂模式
2. 是什么
工厂模式(Factory Method)是一种创建型的结构模式,专门用来创建对象。
当我们明确的有在不同的场景下,创建不同的对象的需求时候,就需要 工厂模式 了。
其大概的结构如下:
整体上来说,分为4个部分:
- 工厂接口:创建对象(产品)的接口
- 工厂(实现) 类:实现工厂接口,创建具体的产品
- 产品接口:定义产品的功能
- 产品实现类:实现产品的功能
举一个例子,我们买车的时候,根本不关心这个车是怎么生产出来的。只关心在不同的场景下,想要什么车。
这也就是工厂模式中,用户只要完成对象的实例化,并不关心具体的创建 和 对象的功能实现是如何。
3. 怎么用
我们看一个豪车生产的例子:
// 产品接口
public Interface Car{
public void drive();
}
// 产品实现
public class Bmw implements Car{
@Override
public void drive(){ sout("Driving a Bmw.")}
}
public class Benz implements Car{
@Override
public void drive(){ sout("Driving a Benz.")}
}
public class Audi implements Car{
@Override
public void drive(){ sout("Driving an Audi.")}
}
// 工厂接口
public Interface Factory{
public Car create(); // 产品接口就是让工厂接口用的,不然没办法实现“不同场景下生产不同产品”
}
// 工厂实现类
public class BmwFactory implements Factory{
@Override
public Car create(){ return new Bmw(); }
}
public class BenzFactory implements Factory{
@Override
public Car create(){ return new Benz(); }
}
public class AudiFactory implements Factory{
@Override
public Car create(){ return new Audi(); }
}
这里,我们就实现了,在不同的场景下,直接用不同的工厂实现类,来实例化不同的对象。
4. 为什么
从上面的例子来看,我们在使用Car的时候,只需要直接根据使用需求,去调用对应的工厂类来实例化不同的 Car 就行。
这样做的好处如下:
- 用户不用关注对象的实现,直接实例化就行
- 如果增加了不同的类型,直接增加对应的工厂类即可,松耦合,不会影响已有的代码
不好的地方无非就是:
- 需要一些设计,理解上有一些成本
5. 总结
工厂模式总的来说,就是
定义一个创建对象的接口(工厂接口),在工厂实现类(子类)中决定实例化哪一个产品类。
Factory Method使一个类的实例化延迟到其子类。