【什么是抽象工厂模式】
抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。
抽象工厂模式将对象的创建与使用分离,客户端不需要知道具体的产品细节,只需要知道产品接口即可,从而将客户端代码与具体产品的实现分离开来,更容易进行系统维护以及扩展。
【抽象工厂模式适用场景】
1. 系统需要不同类型的对象作为产品;
2. 系统需要在不同条件下创建不同具体产品;
3. 系统需要简化产品的切换,增加新产品时方便扩展。
【抽象工厂模式角色】
1. 抽象产品:定义产品的接口;
2. 具体产品:实现抽象产品接口的具体产品类;
3. 抽象工厂:定义创建抽象产品的方法;
4. 具体工厂:实现抽象工厂接口,返回具体产品的实例。
【示例代码】
以手机生产厂商为例,抽象工厂为手机厂商,具体工厂为华为、小米等,抽象产品为手机,具体产品为华为Mate40、小米11等。
首先,定义抽象产品Phone:
```
public interface Phone {
void make();
}
```
其次,定义具体产品:
```
public class HuaweiMate40 implements Phone {
@Override
public void make() {
System.out.println("生产华为Mate40");
}
}
```
```
public class XiaoMi11 implements Phone {
@Override
public void make() {
System.out.println("生产小米11");
}
}
```
然后,定义抽象工厂PhoneFactory:
```
public interface PhoneFactory {
Phone makePhone();
}
```
最后,实现具体工厂:
```
public class HuaweiFactory implements PhoneFactory {
@Override
public Phone makePhone() {
return new HuaweiMate40();
}
}
```
```
public class XiaoMiFactory implements PhoneFactory {
@Override
public Phone makePhone() {
return new XiaoMi11();
}
}
```
【抽象工厂模式优缺点分析】
1. 优点:
(1)抽象工厂模式可以屏蔽产品实现类的具体实现,只关注产品的接口定义,不会受产品类变化的影响,具备较好的扩展性。
(2)可以直接通过产品族的定义来创建产品,这样更符合“开闭原则”,当需求变化时,只需要增加新的产品族,就可以创建新的产品对象,无需修改原有代码。
2. 缺点:
(1)产品族扩展困难,如需增加新的产品,需要修改抽象工厂的接口及所有的具体工厂,这对系统的维护性和扩展性带来较大影响。
(2)新加产品等级结构复杂,可能需要增加很多具体类,导致类数目增多。
扫码咨询 领取资料