首页 > 其他分享 >工厂模式

工厂模式

时间:2024-05-11 14:42:11浏览次数:24  
标签:Product int virtual 工厂 模式 public

简单工厂模式

把创建封装进一个类里,当实现变化时,我们只需要修改这一个地方。

类图如下
image

工厂方法处理对象的创建,并将对象的创建封装在子类中,使得客户代码从子类对象的创建代码解耦。

代码示例如下

#include <iostream>

using namespace std;

class Product
{
public:
    Product()
    {
    }
    virtual ~Product() 
    {
    }
    virtual int Operate(int x,int y)
    {
        throw runtime_error("error");
    }
};

class ProductA final : public Product // + 
{
public:
    ProductA() : Product() {}
    virtual ~ProductA() {}
    int Operate(int x,int y) override
    {
        return x + y;
    }
};

class ProductB : public Product // *
{
public:
    ProductB() : Product() {}
    virtual ~ProductB() {}
    int Operate(int x,int y) override
    {
        return x * y;
    }
};

enum ProductType { PRODUCT_A, PRODUCT_B };

class Factory
{
public:
    virtual ~Factory() {}
    Product* create_product(ProductType type)
    {
        if (type == PRODUCT_A)
        {
            cout << "create product A" << endl;
            return new ProductA();
        }
        else if (type == PRODUCT_B)
        {
            cout << "create product B" << endl;
            return new ProductB();
        }
        else
        {
            throw runtime_error("error type");
        }
    }
};


int main()
{
    cout << "test" << endl;
    Factory factory;
    Product* op1 = factory.create_product(PRODUCT_A);
    cout << op1->Operate(3, 2) << endl;
    Product* op2 = factory.create_product(PRODUCT_B);
    cout << op2->Operate(3, 2) << endl;
    //factory.create_product(PRODUCT_C);
    return 0;
}

抽象工厂模式

抽象工厂为产品家族提供一个接口。

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

类图如下:
image

工厂模式和抽象工厂模式的区别

  • 工厂模式适用于创建单一类型的对象,而抽象工厂模式适用于创建多个相互关联的对象。
  • 工厂模式是一对一的,抽象工厂模式是多对多的。

抽象工厂的优点:
组织一批相关的产品,有多个工厂。
缺点:
添加产品的时候,需要改变接口,进入类的内部修改类。

工厂方法的优点:
将客户代码从要实例化的具体类中解耦,不需要知道要创建哪些具体类(接口是同一个,参数不一样)

标签:Product,int,virtual,工厂,模式,public
From: https://www.cnblogs.com/hy227/p/18186470

相关文章

  • 结构型-装饰模式(Decorator)
    1.简介装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。2.定义装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。装饰对象包含一个真......
  • 单例模式的两种实现方式(初始化时创建以及运行时创建)
    单例模式删除析构函数通常意味着单例对象应该一直存活直到程序结束。在单例模式中,这通常是可取的,因为单例对象的生命周期通常与应用程序的生命周期相同。但是这样的话需要有一个函数来回收资源。以下例子:使用双重检查锁实现(线程安全)实现模板来创建单例#include<iostream>......
  • Visual Components 3D工厂仿真与物流规划解决方案
    VisualComponents是新一代的数字化工业仿真软件,涵盖3D工艺仿真、装配仿真、人机协作、物流仿真、机器人仿真、虚拟调试、数字孪生工厂等功能于一体的数字化工业仿真平台。 在智能制造的发展过程中,3D仿真技术已经成为推动产业升级、优化生产流程的重要工具。VisualComponents......
  • wps加载项在vue2项目中的应用(publish模式)
    wps加载项在vue2项目中的应用应用代码:wps.js/***WPSOA助手-WPS启动方法入口*/varpluginsMode=location.search.split("=")[1];//截取url中的参数值varpluginType=WpsInvoke.ClientType.wps;//加载项类型wps,et,wppvarpluginName="WpsOAAssist";//加载项名......
  • 22.单元模式
    【一】单例模式让一个类只创建一个对象,即所有对象都是一样的1)元类classMyType(type):def__init__(cls,name,bases,name_space):#给自己的类加一个属性:instance初始值Nonecls.instance=Nonesuper().__init__(name,bases,name_space......
  • Java学设计模式之迭代器模式
    一、迭代器模式概念1.1什么是迭代器模式迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。简单来说,迭代器模式可以让你遍历一个集合对象,而无需了解其内部结构。结构迭代器(Iterator):定义了访问和遍历元素的接......
  • Docker 桥接模式下端口映射会绕过防火墙
    问题描述使用Docker桥接模式启动了一个MySQL容器查看防火墙发现并未开启3306端口,但该宿主机3306端口仍能被第三方机器访问telnet152.51.32.113306 问题本质Docker在进行端口映射时,已经自动使用iptables命令修改了防火墙规则;并且这个规则不会被ufw显示、管理;甚至插入的......
  • Java学设计模式之备忘录模式
    一、备忘录模式概念1.1什么是备忘录模式备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这种模式通常用于需要实现撤销操作或者历史记录功能的场景。结构备忘录模式通常包含以下几个要素:Originator(发起人):定义了一个方法用于创建......
  • Java学设计模式之中介者模式
    一、中介者模式概念1.1什么是中介者模式中介者模式是一种行为型设计模式,它通过将对象之间的交互行为集中到一个中介者对象中来解耦对象之间的关联。这种模式被用来减少对象之间的直接通信,从而降低了系统的耦合度,使得系统易于维护和扩展。结构中介者模式通常包含以下几个要素:......
  • Java学设计模式之享元模式
    一、享元模式概念1.1什么是享元模式享元模式是一种结构型设计模式,旨在通过共享对象来最大程度地减少内存使用和提高性能。在享元模式中,对象被设计成可共享的,以便在需要时能够被多个不同的上下文使用。结构享元模式通常包含以下几个要素:Flyweight(享元):定义了共享对象的接口......