下午好🌅🌅🌅
本答案参考通义千问
抽象工厂模式代码实现
1. 定义抽象工厂接口 AbstractFactory
public interface AbstractFactory {
Button createButton();
Text createText();
}
2. 定义具体工厂类 WindowsFactory 和 UnixFactory
// Windows工厂类
public class WindowsFactory implements AbstractFactory {
@Override
public Button createButton() {
return new WindowsButton();
}
@Override
public Text createText() {
return new WindowsText();
}
}
// Unix工厂类
public class UnixFactory implements AbstractFactory {
@Override
public Button createButton() {
return new UnixButton();
}
@Override
public Text createText() {
return new UnixText();
}
}
3. 定义抽象产品接口 Button 和 Text
// Button接口
public interface Button {
void display();
}
// Text接口
public interface Text {
void display();
}
4. 定义具体产品类 WindowsButton, WindowsText, UnixButton, UnixText
// WindowsButton具体产品类
public class WindowsButton implements Button {
@Override
public void display() {
System.out.println("Displaying Windows Button");
}
}
// WindowsText具体产品类
public class WindowsText implements Text {
@Override
public void display() {
System.out.println("Displaying Windows Text");
}
}
// UnixButton具体产品类
public class UnixButton implements Button {
@Override
public void display() {
System.out.println("Displaying Unix Button");
}
}
// UnixText具体产品类
public class UnixText implements Text {
@Override
public void display() {
System.out.println("Displaying Unix Text");
}
}
5. 客户端代码
public class Client {
public static void main(String[] args) {
// 创建Windows工厂
AbstractFactory windowsFactory = new WindowsFactory();
// 使用Windows工厂创建Button和Text
Button button = windowsFactory.createButton();
Text text = windowsFactory.createText();
// 显示Button和Text
button.display();
text.display();
// 创建Unix工厂
AbstractFactory unixFactory = new UnixFactory();
// 使用Unix工厂创建Button和Text
Button unixButton = unixFactory.createButton();
Text unixText = unixFactory.createText();
// 显示Button和Text
unixButton.display();
unixText.display();
}
}
设计模式图解
抽象工厂模式的UML图
+-------------------+
| AbstractFactory |
|-------------------|
| +createButton(): Button |
| +createText(): Text |
+-------------------+
|
| 实现
v
+-------------------+ +-------------------+
| WindowsFactory |------>| UnixFactory |
|-------------------| |-------------------|
| +createButton(): Button | | +createButton(): Button |
| +createText(): Text | | +createText(): Text |
+-------------------+ +-------------------+
| |
| 实现 | 实现
v v
+-------------------+ +-------------------+
| Button | | Text |
|-------------------| |-------------------|
| +display(): void | | +display(): void |
+-------------------+ +-------------------+
| |
| 实现 | 实现
v v
+-------------------+ +-------------------+
| WindowsButton | | UnixButton |
|-------------------| |-------------------|
| +display(): void | | +display(): void |
+-------------------+ +-------------------+
| |
| 实现 | 实现
v v
+-------------------+ +-------------------+
| WindowsText | | UnixText |
|-------------------| |-------------------|
| +display(): void | | +display(): void |
+-------------------+ +-------------------+
说明:
- AbstractFactory:抽象工厂接口,定义了创建Button和Text的方法。
- WindowsFactory 和 UnixFactory:具体工厂类,分别实现了Windows和Unix下的具体产品。
- Button 和 Text:抽象产品接口,定义了Button和Text的行为。
- WindowsButton, WindowsText, UnixButton, UnixText:具体产品类,分别实现了Windows和Unix下的具体产品。
总结
通过抽象工厂模式,我们可以轻松地在不同的操作系统之间切换,而不需要修改客户端代码。只需更换具体的工厂类即可实现不同操作系统的图形构件。