学习Java抽象工厂模式并举例
Java抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。
抽象工厂模式通常用于需要创建一组相关对象的场景,例如UI界面库,其中需要同时创建按钮、文本框、标签等组件。
以下是一个Java抽象工厂模式的示例:
// 定义抽象工厂接口
public interface AbstractUIFactory {
public Button createButton();
public TextField createTextField();
public Label createLabel();
}
// 定义具体工厂类
public class WindowsUIFactory implements AbstractUIFactory {
public Button createButton() {
return new WindowsButton();
}
public TextField createTextField() {
return new WindowsTextField();
}
public Label createLabel() {
return new WindowsLabel();
}
}
public class MacUIFactory implements AbstractUIFactory {
public Button createButton() {
return new MacButton();
}
public TextField createTextField() {
return new MacTextField();
}
public Label createLabel() {
return new MacLabel();
}
}
// 定义抽象产品接口
public interface Button {
public void click();
}
public interface TextField {
public void input(String text);
}
public interface Label {
public void setText(String text);
}
// 定义具体产品类
public class WindowsButton implements Button {
public void click() {
System.out.println("Windows button clicked.");
}
}
public class WindowsTextField implements TextField {
public void input(String text) {
System.out.println("Inputting " + text + " in Windows text field.");
}
}
public class WindowsLabel implements Label {
public void setText(String text) {
System.out.println("Setting text " + text + " in Windows label.");
}
}
public class MacButton implements Button {
public void click() {
System.out.println("Mac button clicked.");
}
}
public class MacTextField implements TextField {
public void input(String text) {
System.out.println("Inputting " + text + " in Mac text field.");
}
}
public class MacLabel implements Label {
public void setText(String text) {
System.out.println("Setting text " + text + " in Mac label.");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractUIFactory factory = new WindowsUIFactory();
Button button = factory.createButton();
TextField textField = factory.createTextField();
Label label = factory.createLabel();
button.click();
textField.input("Hello World!");
label.setText("This is a Windows label.");
factory = new MacUIFactory();
button = factory.createButton();
textField = factory.createTextField();
label = factory.createLabel();
button.click();
textField.input("Hello World!");
label.setText("This is a Mac label.");
}
}
在这个示例中,我们定义了一个抽象工厂接口AbstractUIFactory,并定义了三个抽象产品接口Button、TextField和Label。然后,我们定义了两个具体的工厂类WindowsUIFactory和MacUIFactory,它们分别实现了AbstractUIFactory接口,并分别返回了针对Windows和Mac平台的具体产品实例。最后,我们编写了客户端代码,根据不同的工厂实例化具体产品,并调用它们的方法。
这个示例展示了如何使用抽象工厂模式来创建一组相关的UI组件,并在不同的平台上创建不同的实例。它可以帮助我们在不同的环境中使用相同的代码,并且在需要添加新的产品时,只需要创建一个新的产品类和一个新的具体工厂即可
原文地址: https://www.cveoy.top/t/topic/euW1 著作权归作者所有。请勿转载和采集!