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

抽象工厂模式

概念

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


应用场景

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

注意点

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

核心要素

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

Java代码示例

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. 扩展的抽象工厂

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

    java 复制代码
    interface AdvancedGUIFactory extends GUIFactory {
        Slider createSlider();
    }
  2. 链式工厂

    通过将工厂的创建逻辑封装到链中,按需创建产品。

    java 复制代码
    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. 动态工厂选择

    根据环境或配置动态选择具体工厂。

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

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

相关推荐
闲人一枚(学习中)2 天前
设计模式-创建型-抽象工厂模式
设计模式·抽象工厂模式
哪 吒2 天前
最简单的设计模式,抽象工厂模式,是否属于过度设计?
设计模式·抽象工厂模式
程序员奇奥3 天前
设计模式——简单工厂模型、工厂模式、抽象工厂模式、单例模式、代理模式、模板模式
单例模式·设计模式·抽象工厂模式
shinelord明11 天前
【再谈设计模式】抽象工厂模式~对象创建的统筹者
数据结构·算法·设计模式·软件工程·抽象工厂模式
xianwu54312 天前
【设计模式】工厂模式
开发语言·c++·设计模式·简单工厂模式·抽象工厂模式
努力编程的阿伟14 天前
软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式
设计模式·软件工程·抽象工厂模式
Hello.Reader15 天前
抽象工厂模式详解
抽象工厂模式
编程、小哥哥16 天前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
sniper_fandc18 天前
抽象工厂模式
java·设计模式·抽象工厂模式
CoderIsArt25 天前
工厂方法模式与抽象工厂模式
java·工厂方法模式·抽象工厂模式