当前位置: 首页 > news >正文

为企网站虚拟主机免费空间

为企网站,虚拟主机免费空间,推广 高端网站建设,电子商务网站的建设费用案例链接:C 设计模式 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 原型模式 链接:C 设计模式 - 建造者模式 工厂方法(Factory Method)是创建型设计模式之一,它提供了一种创建对象的接口&#xf…

链接:C++ 设计模式
链接:C++ 设计模式 - 抽象工厂
链接:C++ 设计模式 - 原型模式
链接:C++ 设计模式 - 建造者模式

工厂方法(Factory Method)是创建型设计模式之一,它提供了一种创建对象的接口,但由子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。

1.问题分析

在面向对象编程中,我们经常需要创建对象,但具体的对象类型在编译时并不确定,可能会在运行时根据不同的条件进行选择。如果直接在代码中使用 new 关键字来创建对象,会导致代码的耦合度高,难以维护和扩展。

工厂方法模式通过定义一个创建对象的接口,将对象的实例化延迟到子类,从而使得代码更加灵活和可扩展。

2.实现步骤

  1. 定义产品接口:定义一个接口或抽象类,描述产品的公共接口。
  2. 实现具体产品:实现具体产品类,提供不同的产品实现。
  3. 定义工厂接口:定义一个创建产品对象的接口。
  4. 实现具体工厂:实现具体工厂类,这些类实现了工厂接口,并负责实例化具体的产品对象。
  5. 创建客户端类:创建一个客户端类,使用工厂接口来创建产品对象,并管理它们的行为。
  6. 客户端代码:创建具体的工厂对象,并将其传递给客户端类,调用客户端类的方法来管理产品对象。

3.代码示例

以机器人作为示例。

3.1.定义产品接口

// 机器人接口
class Robot {public:virtual ~Robot() = default;virtual void performTask() const = 0;
};

3.2.实现具体产品

// 具体机器人A
class CleaningRobot : public Robot {public:void performTask() const override { std::cout << "CleaningRobot is cleaning the floor." << std::endl; }
};
// 具体机器人B
class CookingRobot : public Robot {public:void performTask() const override { std::cout << "CookingRobot is cooking a meal." << std::endl; }
};

3.3.定义工厂接口

// 工厂接口
class RobotFactory {public:virtual ~RobotFactory() = default;virtual std::unique_ptr<Robot> createRobot() const = 0;
};

3.4.实现具体工厂

// 具体工厂A,负责创建具体机器人A
class CleaningRobotFactory : public RobotFactory {public:std::unique_ptr<Robot> createRobot() const override { return std::make_unique<CleaningRobot>(); }
};
// 具体工厂B,负责创建具体机器人B
class CookingRobotFactory : public RobotFactory {public:std::unique_ptr<Robot> createRobot() const override { return std::make_unique<CookingRobot>(); }
};

3.5.创建客户端类

// 客户端类
class RobotManager {public:RobotManager(std::unique_ptr<RobotFactory> factory) : factory_(std::move(factory)) {}void manageRobot() const {std::unique_ptr<Robot> robot = factory_->createRobot();robot->performTask();}private:std::unique_ptr<RobotFactory> factory_;
};

3.6.客户端代码

int main() {std::unique_ptr<RobotFactory> cleaningFactory = std::make_unique<CleaningRobotFactory>();RobotManager cleaningManager(std::move(cleaningFactory));cleaningManager.manageRobot();std::unique_ptr<RobotFactory> cookingFactory = std::make_unique<CookingRobotFactory>();RobotManager cookingManager(std::move(cookingFactory));cookingManager.manageRobot();return 0;
}

4.总结

在这个示例中,RobotManager类使用了工厂方法来创建机器人对象,并管理它们的行为。这样,客户端代码只需要与RobotManager和工厂接口交互,而不需要知道具体的机器人类,从而实现了更好的解耦和扩展性。

抽象工厂与工厂方法的区别:

  • 工厂方法:关注的是单个产品对象的创建。它通过定义一个创建对象的接口,让子类决定实例化哪一个具体类。
  • 抽象工厂:关注的是一组相关或相互依赖的产品对象的创建。它通过定义一个创建一系列相关产品对象的接口,让具体工厂类实现这些接口来创建具体的产品对象。
http://www.yayakq.cn/news/889245/

相关文章:

  • 模板手机网站建设价格明细表青岛英文网站建设服务公司
  • 新乡建设招标投标网站郑州app开发外包
  • 高端定制网站速度深圳大型互联网公司
  • 专门做悬疑推理小说的阅读网站icp备案需要什么材料
  • 网站服务器怎么迁移pc版网站生成App
  • 杭州自助建站软件给公司做门户网站
  • 自己的网站在哪里找建设美食电子商务网站
  • 电影宣传网站开发设计做刷网站
  • 觉得自己做的网站土怎么办企业网站结构图
  • 自己做网站主机建设局是干嘛的
  • 网站建设 中企动力 东莞怎么联系地推公司
  • 更换网站后台管理系统网站开发资格证书
  • 烟台企业网站制作公司即时设计
  • 西安网站建设优化服务公司做视频网站把视频放在哪里找
  • 网站设计与程序方向专业一般通过中间人转账是否违法
  • 建设网站用户名是什么原因网站建设属于什么经营类型
  • 张家港网站优化温州外发加工网
  • 外贸 网站 seo企业网站建设用什么
  • 濮阳网站建设知名公司排名江苏免费关键词排名外包
  • 关于学校网站建设学做网站要学哪些
  • 淘宝网站建设可行性分析报告合肥seo结算
  • 响应式网页制作教程网站网络排名优化方法
  • 上海网站建设服务框架诸暨建设局网站
  • 个人网站备案转企业备案医院建筑工程网
  • 重庆网站开发哪家好网站图片设置隐私保护怎么下载
  • 做个网站需要多久网站设计费用多少公司网站制作范文
  • 网站标题怎么隔开常州网站制作公司有哪些
  • 织梦网站源文件没有style文件夹怎么修改网站背景做一个网站人员
  • 如何在网上建立网站个人门户网站模板
  • 杭州网站建设公司推荐网站开发调研