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

做网站常用工具高校门户网站建设

做网站常用工具,高校门户网站建设,陇西做网站的广告店,厦门网页设计工作室抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的独立工厂,而不需要指定它们的具体类。 概念解析 抽象工厂模式的核心思想是: 提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具…

       抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的独立工厂,而不需要指定它们的具体类。        

概念解析

        抽象工厂模式的核心思想是:

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

  2. 将对象的创建与使用分离

  3. 支持产品家族的创建,确保创建的产品是兼容的

主要组成部分

         抽象工厂(Abstract Factory):声明创建抽象产品对象的接口

         具体工厂(Concrete Factory):实现创建具体产品对象的操作

         抽象产品(Abstract Product):为一类产品对象声明接口

         具体产品(Concrete Product):定义具体工厂创建的产品对象,实现抽象产品接口

         客户端(Client):仅使用由抽象工厂和抽象产品类声明的接口

代码示例

#include <iostream>
#include <memory>
#include <string>// 抽象产品A:按钮接口
class Button {
public:virtual void render() = 0;virtual void onClick() = 0;virtual ~Button() = default;
};// 抽象产品B:复选框接口
class CheckBox {
public:virtual void render() = 0;virtual void onCheck() = 0;virtual ~CheckBox() = default;
};// 具体产品A1:Windows按钮
class WindowsButton : public Button {
public:void render() override {std::cout << "渲染一个Windows风格的按钮" << std::endl;}void onClick() override {std::cout << "Windows按钮点击事件处理" << std::endl;}
};// 具体产品A2:MacOS按钮
class MacOSButton : public Button {
public:void render() override {std::cout << "渲染一个MacOS风格的按钮" << std::endl;}void onClick() override {std::cout << "MacOS按钮点击事件处理" << std::endl;}
};// 具体产品B1:Windows复选框
class WindowsCheckBox : public CheckBox {
public:void render() override {std::cout << "渲染一个Windows风格的复选框" << std::endl;}void onCheck() override {std::cout << "Windows复选框选中事件处理" << std::endl;}
};// 具体产品B2:MacOS复选框
class MacOSCheckBox : public CheckBox {
public:void render() override {std::cout << "渲染一个MacOS风格的复选框" << std::endl;}void onCheck() override {std::cout << "MacOS复选框选中事件处理" << std::endl;}
};// 抽象工厂接口
class GUIFactory {
public:virtual std::unique_ptr<Button> createButton() = 0;virtual std::unique_ptr<CheckBox> createCheckBox() = 0;virtual ~GUIFactory() = default;
};// 具体工厂1:Windows工厂
class WindowsFactory : public GUIFactory {
public:std::unique_ptr<Button> createButton() override {return std::make_unique<WindowsButton>();}std::unique_ptr<CheckBox> createCheckBox() override {return std::make_unique<WindowsCheckBox>();}
};// 具体工厂2:MacOS工厂
class MacOSFactory : public GUIFactory {
public:std::unique_ptr<Button> createButton() override {return std::make_unique<MacOSButton>();}std::unique_ptr<CheckBox> createCheckBox() override {return std::make_unique<MacOSCheckBox>();}
};// 客户端代码
class Application {
private:std::unique_ptr<GUIFactory> factory_;std::unique_ptr<Button> button_;std::unique_ptr<CheckBox> checkbox_;public:// 构造函数接收一个抽象工厂explicit Application(std::unique_ptr<GUIFactory> factory) : factory_(std::move(factory)) {}// 创建UI组件void createUI() {button_ = factory_->createButton();checkbox_ = factory_->createCheckBox();}// 渲染UIvoid render() {if (button_ && checkbox_) {button_->render();checkbox_->render();}}// 模拟用户交互void simulateUserActions() {if (button_ && checkbox_) {button_->onClick();checkbox_->onCheck();}}
};// 根据配置创建适当的工厂
std::unique_ptr<GUIFactory> createFactory(const std::string& os_type) {if (os_type == "Windows") {return std::make_unique<WindowsFactory>();} else if (os_type == "MacOS") {return std::make_unique<MacOSFactory>();}throw std::runtime_error("未知的操作系统类型");
}int main() {std::cout << "请选择操作系统类型 (Windows/MacOS): ";std::string os_type;std::cin >> os_type;try {// 创建对应操作系统的工厂auto factory = createFactory(os_type);// 创建应用并配置工厂Application app(std::move(factory));// 创建UIapp.createUI();// 渲染UIapp.render();// 模拟用户交互app.simulateUserActions();} catch (const std::exception& e) {std::cerr << "错误: " << e.what() << std::endl;return 1;}return 0;
}

模式优势

  1. 确保产品兼容性:抽象工厂确保创建的产品是兼容的(都是Windows风格或都是MacOS风格)

  2. 解耦客户端代码:客户端代码只与抽象接口交互,不依赖具体实现

  3. 单一职责原则:将产品创建代码集中在一个位置,便于维护

  4. 开闭原则:引入新的产品变体(如Linux风格)时无需修改现有代码

适用场景

  1. 当系统需要独立于其产品的创建、组合和表示时

  2. 当系统需要配置多个产品家族中的一个时

  3. 当需要强调一系列相关产品对象的设计以便联合使用时

  4. 当需要提供一个产品类库,但只想显示它们的接口而非实现时

与其他模式的关系

  1. 与工厂方法模式:抽象工厂通常基于一组工厂方法实现

  2. 与单例模式:具体工厂通常实现为单例

  3. 与原型模式:抽象工厂可以使用原型模式来初始化产品对象


文章转载自:

http://GFd17I4F.ccphj.cn
http://utJ9VUac.ccphj.cn
http://QNCU6OgA.ccphj.cn
http://J63lJW5w.ccphj.cn
http://sPekk7Cf.ccphj.cn
http://h7e2jAd3.ccphj.cn
http://sGhYlvNL.ccphj.cn
http://NdfYxXcs.ccphj.cn
http://gknDmZhw.ccphj.cn
http://oLrI7PQU.ccphj.cn
http://dpdH4h1y.ccphj.cn
http://YiqGavvR.ccphj.cn
http://ZMs69DyG.ccphj.cn
http://tVm5MxVs.ccphj.cn
http://axFMhJSV.ccphj.cn
http://XBEa3Xol.ccphj.cn
http://1xxwqtzj.ccphj.cn
http://gQOG9mfC.ccphj.cn
http://mfpvs30n.ccphj.cn
http://zpQ981QO.ccphj.cn
http://Lo9gJZom.ccphj.cn
http://4TsbPGiv.ccphj.cn
http://BzahCD2a.ccphj.cn
http://4gSFjBSF.ccphj.cn
http://X9dZcSE1.ccphj.cn
http://bFDtVIV9.ccphj.cn
http://Qx97Sj5l.ccphj.cn
http://awRzmnaP.ccphj.cn
http://wEUtL1L2.ccphj.cn
http://wgX91psn.ccphj.cn
http://www.dtcms.com/wzjs/620107.html

相关文章:

  • 七彩建设发展有限公司官方网站呼叫中心系统怎么收费
  • dedecms 调用网站名称网站建设怎么跑业务
  • 网站注册备案之后怎么做网站代理 指定网站 host
  • 商城类网站怎么优化怎么下载文章到wordpress
  • 建设网站技术解决方案wordpress 行间距插件
  • 做违规网站公司网站开发维护
  • 国际贸易英文网站市场调研报告800字
  • 中国移动网站建设wordpress 页面文件
  • 手机端的网站怎么做的糕点网站策划书
  • 网站文章不收录的原因建筑工程网架
  • 邢台做网站费用甘肃省建设厅注册中心网站
  • 企业网站建设课程设计crm管理
  • 我要建个网站做灯箱片的设计网站
  • 做网站去哪里网站后台管理系统展望
  • 网站建设报价明细单怎么咨询网络服务商
  • ae做动画教程网站每天免费体验6小时的云电脑
  • 网站开发团队人员配置山东住房城乡建设厅网站
  • 负责网站建设和网络推广的wordpress dux主题5.0
  • h5免费制作平台火蚁邀请函南京网站seo服务
  • 网站怎么做右上角消息提醒做网站的赚钱吗
  • 广东的网站建设企业网站建设的策略
  • 嘉兴学网站建设酷乐家居在线设计
  • 常州武进区建设局网站中文博客网站模板
  • 网站免费部署瑞安规划建设局网站
  • 山东企业建站系统信息黄骅港旅游攻略
  • 增加网站流量设计接单渠道
  • 怎么用微信做网站电商网站建设浩森宇特
  • 提供虚拟主机服务的网站网站建设的文档
  • 安徽省建设工程资料上传网站重庆做的好的房产网站好
  • 运城网站建设公司有多少网站loading动画