Java设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种常用的创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式通过定义一组抽象工厂和一组抽象产品来实现,每个具体工厂负责创建一族产品,这样可以实现产品族的创建和使用的解耦。

抽象工厂模式主要包含四个角色:

  1. 抽象工厂(Abstract Factory):定义了一组用于创建抽象产品的方法,每个方法对应一个产品族的创建。
  2. 具体工厂(Concrete Factory):实现抽象工厂接口,负责创建具体产品的实例。
  3. 抽象产品(Abstract Product):定义了产品的共同接口,每个抽象产品对应一个产品族。
  4. 具体产品(Concrete Product):实现抽象产品接口,是抽象工厂创建的目标。

下面是一个示例,说明如何使用抽象工厂模式创建不同类型的按钮和文本框对象:

// 抽象产品 - 按钮
interface Button {
    void click();
}

// 具体产品 - Windows 按钮
class WindowsButton implements Button {
    @Override
    public void click() {
        System.out.println("Windows button clicked.");
    }
}

// 具体产品 - Mac 按钮
class MacButton implements Button {
    @Override
    public void click() {
        System.out.println("Mac button clicked.");
    }
}

// 抽象产品 - 文本框
interface TextField {
    void inputText(String text);
}

// 具体产品 - Windows 文本框
class WindowsTextField implements TextField {
    @Override
    public void inputText(String text) {
        System.out.println("Windows text field: " + text);
    }
}

// 具体产品 - Mac 文本框
class MacTextField implements TextField {
    @Override
    public void inputText(String text) {
        System.out.println("Mac text field: " + text);
    }
}

// 抽象工厂
interface GUIFactory {
    Button createButton();
    TextField createTextField();
}

// 具体工厂 - Windows 工厂
class WindowsFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public TextField createTextField() {
        return new WindowsTextField();
    }
}

// 具体工厂 - Mac 工厂
class MacFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new MacButton();
    }

    @Override
    public TextField createTextField() {
        return new MacTextField();
    }
}

// 示例使用
public class AbstractFactoryPatternExample {
    public static void main(String[] args) {
        // 创建 Windows 工厂
        GUIFactory windowsFactory = new WindowsFactory();
        Button windowsButton = windowsFactory.createButton();
        TextField windowsTextField = windowsFactory.createTextField();
        windowsButton.click();  // 输出:Windows button clicked.
        windowsTextField.inputText("Hello");  // 输出:Windows text field: Hello

        // 创建 Mac 工厂
        GUIFactory macFactory = new MacFactory();
        Button macButton = macFactory.createButton();
        TextField macTextField = macFactory.createTextField();
        macButton.click();  // 输出:Mac button clicked.
        macTextField.inputText("Hello");  // 输出:Mac text field: Hello
    }
}

在上面的示例中,ButtonTextField 是抽象产品接口,WindowsButtonMacButtonWindowsTextFieldMacTextField 是具体产品类,实现了抽象产品接口。GUIFactory 是抽象工厂接口,包含了创建按钮和文本框的方法。WindowsFactoryMacFactory 是具体工厂类,分别实现了 GUIFactory 接口,负责创建相应的具体产品对象。

通过使用抽象工厂模式,客户端代码只需要与抽象工厂和抽象产品接口进行交互,而不需要直接与具体产品类打交道。这样可以使代码更加灵活和可扩展,当需要切换不同的产品族时,只需要修改具体工厂类而不影响客户端代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值