C++ 【抽象工厂】

基础理解

Q:抽象工厂与简单工厂有什么不同
A:抽象工厂适用于一个产品下面有许多具体的子产品,而简单工厂则是只有一个单一的产品。所以抽象工厂在使用中会多一些。

Q:抽象工厂的应用场景
A:首先你要懂得简单工厂的思路用法,如果你需要与多个不同系列(椅子,沙发)的相关产品(维多利亚,现代)交互, 但是由于无法提前获取具体产品类 (现代椅子 ), 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建,在这种情况下, 你可以使用抽象工厂。
跳转观看简单工厂

注意点

  1. 兼容性:确保由同一抽象工厂创建的所有产品都是兼容的,并且可以系统中无缝地进行交互和替换。
  2. 管理变体:确保每个变体都有对应的工厂,并且工厂创建的产品能够符合该变体的特性和要求。
  3. 足够抽象:遵循循依赖倒置原则,即高层模块不应该依赖于具体的实现细节,而应该依赖于抽象

在我下面写的代码中,ClientCode(客户端) 依赖于抽象类(抽象工厂AbstractFactory) 不具体依赖于是维多利亚工厂 或 现代工厂

创建抽象工厂

例如我们有:

  1. 椅子种类:维多利亚椅子 现代椅子…
  2. 沙发种类:维多利亚沙发 现代沙发…

拆分一下椅子种类
椅子抽象类拆分具体类
我们需要声明抽象工厂(AbstractFactory)——包含系列中所有产品构造方法的接口:Creat_ChairCreat_Sofa
基于抽象工厂类创建 具体分支的工厂:维多利亚工厂现代工厂 (维多利亚工厂只能创建维多利亚椅子,和维多利亚沙发)
有什么好用的画图软件推荐一下吗?我这个鬼软件复制vscode 的代码就变黑了

UML图

看个大体,明白之间的关系即可
空心箭头:继承关系
虚线箭头:依赖
实线箭头:关联
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
/**
产品家族的每个不同产品都应该有一个基础接口。产品的所有变体都必须实现这个接口。
 */

class Chair
{
   
   
public:
    virtual ~Chair(){
   
   };
    virtual std::string name() const = 0;
};

class VictorianChair : public Chair
{
   
   
public:
    std::string name() const override
    {
   
   
        return "维多利亚椅子\n";
    }
};

class ModernChair : public Chair
{
   
   
    std::string name
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值