三、创建型(抽象工厂模式)

抽象工厂模式

概念
抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式通常用于处理一组产品对象的创建,确保每个产品的组合是一致的。


应用场景

  1. 产品系列:当系统需要创建多个相关产品的实例时,例如在图形用户界面中可能需要按钮、文本框和滚动条。
  2. 跨平台应用:在不同平台上提供不同的实现,确保一致的接口和风格。
  3. 系统扩展:在不改变现有代码的情况下,添加新产品系列时,只需实现新的工厂。
  4. 配置管理:根据不同的配置文件加载不同的产品系列。

注意点

  • 复杂性:抽象工厂模式的引入可能增加系统复杂性,需要明确产品系列的设计。
  • 接口的设计:设计良好的接口非常重要,以便扩展和维护。
  • 新产品的引入:增加新产品时,需要更新抽象工厂及其所有具体工厂,可能会影响现有代码。

核心要素

  1. 抽象工厂:定义创建一系列产品的方法。
  2. 具体工厂:实现抽象工厂,负责创建具体产品。
  3. 抽象产品:定义产品的接口。
  4. 具体产品:实现抽象产品的具体类。

Java代码示例

// 抽象产品
interface Button {
    void paint();
}

interface Checkbox {
    void paint();
}

// 具体产品
class WindowsButton implements Button {
    @Override
    public void paint() {
        System.out.println("绘制 Windows 按钮");
    }
}

class WindowsCheckbox implements Checkbox {
    @Override
    public void paint() {
        System.out.println("绘制 Windows 复选框");
    }
}

class MacButton implements Button {
    @Override
    public void paint() {
        System.out.println("绘制 Mac 按钮");
    }
}

class MacCheckbox implements Checkbox {
    @Override
    public void paint() {
        System.out.println("绘制 Mac 复选框");
    }
}

// 抽象工厂
interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

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

    @Override
    public Checkbox createCheckbox() {
        return new WindowsCheckbox();
    }
}

class MacFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new MacButton();
    }

    @Override
    public Checkbox createCheckbox() {
        return new MacCheckbox();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        GUIFactory factory;
        String osType = "Windows"; // 可以动态决定

        if (osType.equals("Windows")) {
            factory = new WindowsFactory();
        } else {
            factory = new MacFactory();
        }

        Button button = factory.createButton();
        Checkbox checkbox = factory.createCheckbox();

        button.paint();
        checkbox.paint();
    }
}

各种变形用法

  1. 扩展的抽象工厂
    当需要扩展产品系列时,可以创建新的抽象工厂。

    interface AdvancedGUIFactory extends GUIFactory {
        Slider createSlider();
    }
    
  2. 链式工厂
    通过将工厂的创建逻辑封装到链中,按需创建产品。

    class ChainFactory implements GUIFactory {
        private GUIFactory nextFactory;
    
        public void setNextFactory(GUIFactory nextFactory) {
            this.nextFactory = nextFactory;
        }
    
        @Override
        public Button createButton() {
            return nextFactory.createButton();
        }
    
        @Override
        public Checkbox createCheckbox() {
            return nextFactory.createCheckbox();
        }
    }
    
  3. 动态工厂选择
    根据环境或配置动态选择具体工厂。

    class DynamicFactory {
        public static GUIFactory getFactory(String type) {
            if (type.equals("Windows")) {
                return new WindowsFactory();
            } else {
                return new MacFactory();
            }
        }
    }
    

这些是抽象工厂模式的基本知识和变形用法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伯牙碎琴

努力耕耘分享交流,感谢您的赏识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值