首页 > 其他分享 >创建型模式-抽象工厂模式

创建型模式-抽象工厂模式

时间:2023-11-10 14:57:26浏览次数:31  
标签:创建 文本框 工厂 抽象 模式 按钮 public

1 什么是抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定具体的类。抽象工厂模式通过定义一个抽象工厂接口,该接口声明了一组用于创建不同类型对象的工厂方法。每个工厂方法负责创建一种类型的对象,而具体的工厂类则实现了这个接口,负责创建特定类型的对象。

抽象工厂模式适用于需要一次性创建一组相关对象的场景,这些对象之间存在一定的关联关系,且需要保证创建的对象是彼此兼容的。通过使用抽象工厂模式,可以避免客户端代码直接依赖具体类,从而实现了对象的解耦和灵活性。

2 举个例子

假设我们正在开发一个跨平台的界面库,它需要在不同的操作系统上创建相应的按钮和文本框。为了实现界面的跨平台性,我们可以使用抽象工厂模式。

首先,我们定义一个抽象的按钮接口 Button 和一个抽象的文本框接口 Textbox,它们分别声明了按钮和文本框的方法:

class Button {
public:
    virtual void click() const = 0;
    virtual ~Button() {}
};

class Textbox {
public:
    virtual void input() const = 0;
    virtual ~Textbox() {}
};

然后,我们定义一个抽象工厂接口 GUIFactory,其中包含了创建按钮和创建文本框的抽象工厂方法:

class GUIFactory {
public:
    virtual Button* createButton() const = 0;
    virtual Textbox* createTextbox() const = 0;
    virtual ~GUIFactory() {}
};

接下来,我们创建两个具体的按钮类 WindowsButton 和 LinuxButton,它们分别实现了按钮接口:

class WindowsButton : public Button {
public:
    void click() const override {
        cout << "Windows button clicked." << endl;
    }
};

class LinuxButton : public Button {
public:
    void click() const override {
        cout << "Linux button clicked." << endl;
    }
};

然后,我们创建两个具体的文本框类 WindowsTextbox 和 LinuxTextbox,它们分别实现了文本框接口:

class WindowsTextbox : public Textbox {
public:
    void input() const override {
        cout << "Windows textbox input." << endl;
    }
};

class LinuxTextbox : public Textbox {
public:
    void input() const override {
        cout << "Linux textbox input." << endl;
    }
};

最后,我们创建具体的工厂类 WindowsFactory 和 LinuxFactory,它们分别实现了抽象工厂接口,负责创建相应的按钮和文本框对象:

class WindowsFactory : public GUIFactory {
public:
    Button* createButton() const override {
        return new WindowsButton();
    }

    Textbox* createTextbox() const override {
        return new WindowsTextbox();
    }
};

class LinuxFactory : public GUIFactory {
public:
    Button* createButton() const override {
        return new LinuxButton();
    }

    Textbox* createTextbox() const override {
        return new LinuxTextbox();
    }
};

在客户端代码中,我们可以根据当前操作系统选择对应的工厂类,并使用工厂类来创建相应的按钮和文本框对象:

int main() {
    GUIFactory* factory = nullptr; // 根据当前操作系统选择工厂类

    // 创建按钮和文本框
    Button* button = factory->createButton();
    Textbox* textbox = factory->createTextbox();

    // 使用按钮和文本框
    button->click();
    textbox->input();

    // 清理资源
    delete button;
    delete textbox;
    delete factory;

    return 0;
}

在上述示例中,我们定义了抽象的按钮接口 Button 和文本框接口 Textbox,以及抽象工厂接口 GUIFactory。通过具体的按钮类和文本框类,以及具体的工厂类 WindowsFactory 和 LinuxFactory,我们可以实现针对不同操作系统的按钮和文本框对象的创建。

3 总结

通过使用抽象工厂模式,我们可以在客户端代码中根据当前操作系统选择对应的工厂类,并通过该工厂类创建相应的按钮和文本框对象,而无需关心具体的类和操作系统细节,从而实现了对象的解耦和横向扩展的灵活性。

标签:创建,文本框,工厂,抽象,模式,按钮,public
From: https://www.cnblogs.com/luoxiang/p/17824092.html

相关文章

  • 创建型模式-工厂方法模式
    1什么是工厂方法模式工厂方法模式(FactoryMethodPattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将对象的实际创建延迟到子类中。这样,客户端代码使用工厂方法来创建对象,而不需要了解具体对象的创建细节,从而实现了对象的解耦和灵活性。工厂方法模式的核心思想是......
  • 创建型模式-原型模式
    1什么是原型模式原型模式(PrototypePattern)是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而无需通过标准的构造函数来创建。原型模式适用于需要创建复杂对象的场景,同时又希望避免构造函数的开销。2举个例子举一个简单的例子来说明原型模式,假设我们有一个图形绘制......
  • 结构型模式-装饰模式
    1什么是装饰模式装饰模式(DecoratorPattern)是一种结构型设计模式,它允许将新功能动态地添加到对象中,通过将对象放入特殊的包装对象中,这样可以在不改变其接口的情况下,对对象的功能进行逐步扩展。在装饰模式中,通常包括以下几个角色:抽象构件(Component)、具体构件(ConcreteComponent)......
  • Vue - 创建 Vue3 项目
    Vue-创建Vue3项目 需搭建项目Vue3+ts+sass1. 创建项目npmcreatevite@latest  2. 安装依赖tyarn  3. 启动项目yarndev  4. 处理其他配置问题1) 打开HelloWorld.vue页面,发现一些报红,报错解决:找到tsconfig.json文件, ......
  • 结构型模式-桥接模式
    1什么是桥接模式桥接模式(BridgePattern)是一种用于将抽象部分与它的实现部分分离的设计模式,使它们可以独立地变化。桥接模式通过组合而不是继承的方式来实现两个或多个独立变化的维度,从而减少类之间的耦合性。在桥接模式中,存在两种角色:抽象部分(Abstraction)和实现部分(Implemento......
  • 开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板
    前言上一篇文章(开发一个现代化的.NetCore控制台程序,包含依赖注入/配置/日志等要素)介绍了开发现代化的.NetCore控制台程序的细节,但这还不够,我又创建了一个脚手架模板,并命名为FluentConsole.Templates,可以方便的创建「现代化控制台应用」。源码地址:https://github.com/Deali-A......
  • 抽象类与接口
    抽象类为什么要有抽象类?假设我有一个父类:Animal类1//创建一个动物类2publicclassAnimal{3//动物有名字4publicStringname;5//动物有年龄6publicStringage;78//动物有吃的功能9publicvoideat(){10System......
  • Go 设计模式中中介者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) 中介者模式原理详细解释:中介者模式(MediatorPattern)是一种行为型设计模式,用于降低多个对象之间的直接通信,并使......
  • Go 设计模式中观察者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)          观察者模式原理详细解释:观察者模式(ObserverPattern)是一种行为型设计模式,它定义了......
  • ABAP:CS01/CS02/CS03 BOM创建/修改保存前增强
    BADI:BOM_UPDATEMETHODif_ex_bom_update~change_at_save.******ADDBYZJ20231108校验存储地点是否为空SIFsy-tcodeEQ'CS01'ORsy-tcodeEQ'CS02'ORsy-tcodeEQ'CS03'.LOOPATdelta_stpobINTODATA(ls_stpob)WHERE......