抽象工厂模式(Abstract Factory Pattern)是一种软件设计模式,属于创建型模式的一种。它提供一个接口用于创建一系列相关或依赖对象的家族,而不需要指定它们具体的类。
抽象工厂模式的核心思想是将具体类的实例化延迟到子类中,这样客户端代码就不需要直接依赖于具体类,而是依赖于抽象的接口。这使得系统更灵活,能够轻松地替换一组相关的类而不影响客户端代码。
主要角色和组成部分:
以生产电脑为例来说明抽象工厂模式。我们将定义电脑和显示器两个产品族,然后创建一个抽象工厂接口,以及两个具体工厂分别用于生产不同品牌的电脑和显示器。
// 抽象产品:电脑
interface Computer {
void turnOn();
}
// 具体产品:华硕电脑
class AsusComputer implements Computer {
@Override
public void turnOn() {
System.out.println("Asus computer is turning on.");
}
}
// 具体产品:联想电脑
class LenovoComputer implements Computer {
@Override
public void turnOn() {
System.out.println("Lenovo computer is turning on.");
}
}
// 抽象产品:显示器
interface Monitor {
void display();
}
// 具体产品:戴尔显示器
class DellMonitor implements Monitor {
@Override
public void display() {
System.out.println("Dell monitor is displaying.");
}
}
// 具体产品:惠普显示器
class HPMonitor implements Monitor {
@Override
public void display() {
System.out.println("HP monitor is displaying.");
}
}
// 抽象工厂接口
interface ComputerFactory {
Computer createComputer();
Monitor createMonitor();
}
// 具体工厂:华硕电脑工厂
class AsusFactory implements ComputerFactory {
@Override
public Computer createComputer() {
return new AsusComputer();
}
@Override
public Monitor createMonitor() {
return new DellMonitor();
}
}
// 具体工厂:联想电脑工厂
class LenovoFactory implements ComputerFactory {
@Override
public Computer createComputer() {
return new LenovoComputer();
}
@Override
public Monitor createMonitor() {
return new HPMonitor();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建华硕电脑工厂
ComputerFactory asusFactory = new AsusFactory();
Computer asusComputer = asusFactory.createComputer();
Monitor asusMonitor = asusFactory.createMonitor();
// 创建联想电脑工厂
ComputerFactory lenovoFactory = new LenovoFactory();
Computer lenovoComputer = lenovoFactory.createComputer();
Monitor lenovoMonitor = lenovoFactory.createMonitor();
// 使用产品
asusComputer.turnOn();
asusMonitor.display();
lenovoComputer.turnOn();
lenovoMonitor.display();
}
}
在这个例子中,ComputerFactory 是抽象工厂接口,定义了创建电脑和显示器的方法。AsusFactory 和 LenovoFactory 是具体的工厂实现,分别生产华硕和联想品牌的电脑和显示器。客户端代码可以通过选择不同的工厂来获取相应品牌的电脑和显示器,而不需要关心具体的产品类。
实际应用
总的来说,抽象工厂模式在需要创建一组相关产品、强调一致性、支持多个产品族、需要在运行时切换产品族等情况下是非常有用的。在这些场景下,抽象工厂模式可以提供一种灵活而且可维护的设计方案。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。