返回
** 抽象工厂模式:让复杂业务对象创建变得简单
Android
2023-11-19 22:06:09
Android设计模式(3)——抽象工厂模式
SEO关键词:
正文:
引子
在软件开发中,随着业务复杂度的增加,我们需要设计模式来处理复杂对象的创建和管理。抽象工厂模式作为工厂方法模式的延伸,为创建多个相关对象家族提供了一种灵活而可扩展的解决方案。
抽象工厂模式的原理
抽象工厂模式的核心在于将对象的创建过程抽象为一个接口。通过实现这个接口,我们可以创建不同的工厂类,每个工厂类负责创建特定类型的对象家族。
具体来说,抽象工厂模式包含以下几个关键元素:
- 抽象工厂 :定义创建不同类型对象家族的接口。
- 具体工厂 :实现抽象工厂接口,负责创建特定类型的对象家族。
- 抽象产品 :定义对象家族中各个产品的接口。
- 具体产品 :实现抽象产品接口,代表对象家族中具体的某个产品。
优势
抽象工厂模式提供了许多优势,包括:
- 可扩展性 :通过添加新的具体工厂,可以轻松扩展应用程序以支持新的对象类型,而无需修改现有代码。
- 模块化 :将对象创建过程与具体产品解耦,提高了代码的可维护性和可复用性。
- 高内聚 :每个具体工厂只负责创建特定类型的对象家族,职责清晰,内聚性高。
- 低耦合 :客户端代码只与抽象工厂接口交互,与具体工厂无关,降低了代码之间的耦合度。
应用场景
抽象工厂模式广泛应用于以下场景:
- 需要创建多个相关对象家族时。
- 对象创建过程复杂或需要灵活配置时。
- 想要将对象的创建与具体实现解耦时。
示例
以制造汽车为例,我们可以使用抽象工厂模式来创建不同型号的汽车。抽象工厂定义了创建左侧和右侧车门的接口,具体工厂则实现该接口,负责创建特定型号的车门。
// 抽象工厂
interface CarFactory {
LeftDoor createLeftDoor();
RightDoor createRightDoor();
}
// 具体工厂(宝马)
class BMWCarFactory implements CarFactory {
@Override
public LeftDoor createLeftDoor() {
return new BMWLeftDoor();
}
@Override
public RightDoor createRightDoor() {
return new BMWRightDoor();
}
}
// 具体工厂(奔驰)
class MercedesCarFactory implements CarFactory {
@Override
public LeftDoor createLeftDoor() {
return new MercedesLeftDoor();
}
@Override
public RightDoor createRightDoor() {
return new MercedesRightDoor();
}
}
// 抽象产品(左侧车门)
interface LeftDoor {
void open();
void close();
}
// 具体产品(宝马左侧车门)
class BMWLeftDoor implements LeftDoor {
@Override
public void open() {
System.out.println("BMW左侧车门打开");
}
@Override
public void close() {
System.out.println("BMW左侧车门关闭");
}
}
// 具体产品(奔驰左侧车门)
class MercedesLeftDoor implements LeftDoor {
@Override
public void open() {
System.out.println("奔驰左侧车门打开");
}
@Override
public void close() {
System.out.println("奔驰左侧车门关闭");
}
}
// 抽象产品(右侧车门)
interface RightDoor {
void open();
void close();
}
// 具体产品(宝马右侧车门)
class BMWRightDoor implements RightDoor {
@Override
public void open() {
System.out.println("BMW右侧车门打开");
}
@Override
public void close() {
System.out.println("BMW右侧车门关闭");
}
}
// 具体产品(奔驰右侧车门)
class MercedesRightDoor implements RightDoor {
@Override
public void open() {
System.out.println("奔驰右侧车门打开");
}
@Override
public void close() {
System.out.println("奔驰右侧车门关闭");
}
}
// 客户端
public class Main {
public static void main(String[] args) {
// 创建宝马汽车工厂
CarFactory bmwFactory = new BMWCarFactory();
// 创建奔驰汽车工厂
CarFactory mercedesFactory = new MercedesCarFactory();
// 创建宝马汽车
LeftDoor bmwLeftDoor = bmwFactory.createLeftDoor();
RightDoor bmwRightDoor = bmwFactory.createRightDoor();
// 创建奔驰汽车
LeftDoor mercedesLeftDoor = mercedesFactory.createLeftDoor();
RightDoor mercedesRightDoor = mercedesFactory.createRightDoor();
// 打开和关闭车门
bmwLeftDoor.open();
bmwRightDoor.open();
mercedesLeftDoor.open();
mercedesRightDoor.open();
bmwLeftDoor.close();
bmwRightDoor.close();
mercedesLeftDoor.close();
mercedesRightDoor.close();
}
}
总结
抽象工厂模式是一种强大的设计模式,它可以帮助我们解决复杂对象创建和管理的问题。通过将对象的创建过程抽象化,我们可以实现业务对象的解耦和复用,提高代码的可扩展性、模块化和维护性。