抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定其具体类。抽象工厂模式是工厂方法模式的扩展,它通过引入抽象工厂和抽象产品来实现对产品家族的创建,从而实现系统的解耦。
在抽象工厂模式中,有两个重要的概念:抽象工厂和具体工厂。抽象工厂定义了用于创建一系列产品的接口,具体工厂则实现了这些接口,并负责创建具体的产品对象。抽象产品定义了产品的公共接口,具体产品则实现了这些接口,并提供了具体的实现。
下面是一个简单的 Java 代码示例,演示了如何使用抽象工厂模式创建不同类型的按钮和文本框:
首先,定义抽象工厂接口 AbstractFactory
和抽象产品接口 Button
和 TextField
:
public interface AbstractFactory {
Button createButton();
TextField createTextField();
}
public interface Button {
void paint();
}
public interface TextField {
void paint();
}
然后,定义具体工厂类 WinFactory
和 MacFactory
,分别实现了抽象工厂接口,并负责创建 Windows 和 Mac 系统下的按钮和文本框:
public class WinFactory implements AbstractFactory {
@Override
public Button createButton() {
return new WinButton();
}
@Override
public TextField createTextField() {
return new WinTextField();
}
}
public class MacFactory implements AbstractFactory {
@Override
public Button createButton() {
return new MacButton();
}
@Override
public TextField createTextField() {
return new MacTextField();
}
}
最后,定义具体产品类 WinButton
、WinTextField
、MacButton
和 MacTextField
,分别实现了抽象产品接口,并提供了具体的实现:
public class WinButton implements Button {
@Override
public void paint() {
System.out.println("Windows button painted.");
}
}
public class WinTextField implements TextField {
@Override
public void paint() {
System.out.println("Windows text field painted.");
}
}
public class MacButton implements Button {
@Override
public void paint() {
System.out.println("Mac button painted.");
}
}
public class MacTextField implements TextField {
@Override
public void paint() {
System.out.println("Mac text field painted.");
}
}
使用抽象工厂模式创建不同类型的按钮和文本框的代码如下:
AbstractFactory factory = new WinFactory();
Button button = factory.createButton();
TextField textField = factory.createTextField();
button.paint();
textField.paint();
factory = new MacFactory();
button = factory.createButton();
textField = factory.createTextField();
button.paint();
textField.paint();
输出结果如下:
Windows button painted.
Windows text field painted.
Mac button painted.
Mac text field painted.
以上就是使用 Java 实现抽象工厂模式的一个简单示例。