• 已删除用户
Gallin
发布于 2023-09-04 / 76 阅读
0

抽象工厂模式

抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定其具体类。抽象工厂模式是工厂方法模式的扩展,它通过引入抽象工厂和抽象产品来实现对产品家族的创建,从而实现系统的解耦。

在抽象工厂模式中,有两个重要的概念:抽象工厂和具体工厂。抽象工厂定义了用于创建一系列产品的接口,具体工厂则实现了这些接口,并负责创建具体的产品对象。抽象产品定义了产品的公共接口,具体产品则实现了这些接口,并提供了具体的实现。

下面是一个简单的 Java 代码示例,演示了如何使用抽象工厂模式创建不同类型的按钮和文本框:

首先,定义抽象工厂接口 AbstractFactory 和抽象产品接口 ButtonTextField

public interface AbstractFactory {
    Button createButton();
    TextField createTextField();
}

public interface Button {
    void paint();
}

public interface TextField {
    void paint();
}

然后,定义具体工厂类 WinFactoryMacFactory,分别实现了抽象工厂接口,并负责创建 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();
    }
}

最后,定义具体产品类 WinButtonWinTextFieldMacButtonMacTextField,分别实现了抽象产品接口,并提供了具体的实现:

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 实现抽象工厂模式的一个简单示例。