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

建设一个商城网站要多少钱网站建设多少钱一年

建设一个商城网站要多少钱,网站建设多少钱一年,百度智能小程序入口官网,深圳龙华新区属于什么区【C设计模式 – 工厂(Factory)模式】—— 对象创建的优雅解耦方案 工厂模式 什么是工厂模式? 工厂模式是一种创建型设计模式,其核心目标是将对象的实例化过程从使用对象的代码中解耦,通过统一接口实现对象的动态创建…

【C++设计模式 – 工厂(Factory)模式】—— 对象创建的优雅解耦方案

工厂模式

什么是工厂模式?

工厂模式是一种创建型设计模式,其核心目标是将对象的实例化过程从使用对象的代码中解耦,通过统一接口实现对象的动态创建。该模式适用于需要根据不同条件生成不同类对象的场景,使系统更符合“开闭原则”(对扩展开放,对修改关闭)。

工厂模式的特点

封装创建过程:将对象的创建逻辑集中在工厂类中,避免业务代码与具体类耦合。多态性支持:通过接口或基类定义产品对象,允许灵活替换具体实现。扩展性强:新增产品类型时无需修改客户端代码,只需扩展工厂即可。标准化生产:所有产品遵循统一接口,确保使用一致性。

为何选择工厂模式?

降低耦合性:客户端无需关注对象创建细节,只需通过接口使用。集中管控:统一管理对象的创建逻辑,便于维护和权限控制(如资源复用)。灵活扩展:新增产品时只需新增工厂类或方法,无需改动已有代码。条件分支优化:替代代码中复杂的if-else或switch条件判断,提升可读性。

工厂模式的不足

类数量膨胀:每增加一个产品可能需要新增工厂类,增加代码复杂度。理解成本:需设计合理的继承层次,过度设计可能影响开发效率。抽象限制:产品必须基于同一接口,若差异过大可能难以抽象。

工厂模式的实现

  1. 简单工厂模式(非严格设计模式)
    通过单一工厂类根据参数返回不同产品实例。
#include <iostream>// 抽象产品类
class Shape {
public:virtual void draw() = 0;virtual ~Shape() = default;
};// 具体产品:圆形
class Circle : public Shape {
public:void draw() override { std::cout << "Drawing Circle\n"; }
};// 具体产品:矩形
class Rectangle : public Shape {
public:void draw() override { std::cout << "Drawing Rectangle\n"; }
};// 简单工厂
class ShapeFactory {
public:static Shape* createShape(const std::string& type) {if (type == "Circle") return new Circle();if (type == "Rectangle") return new Rectangle();return nullptr; }
};int main() {Shape* circle = ShapeFactory::createShape("Circle");Shape* rect = ShapeFactory::createShape("Rectangle");circle->draw(); // "Drawing Circle"rect->draw();   // "Drawing Rectangle"delete circle, delete rect;return 0;
}

**特点:**实现简单但违反开闭原则(新增类型需修改工厂逻辑)。

  1. 工厂方法模式(Factory Method)
    定义抽象工厂接口,由子类决定实例化哪个类。
#include <iostream>// 抽象产品
class Button {
public:virtual void render() = 0;virtual ~Button() = default;
};// 具体产品:Windows按钮
class WinButton : public Button {
public:void render() override { std::cout << "Windows Style Button\n"; }
};// 具体产品:Mac按钮
class MacButton : public Button {
public:void render() override { std::cout << "MacOS Style Button\n"; }
};// 抽象工厂
class GUIFactory {
public:virtual Button* createButton() = 0;virtual ~GUIFactory() = default;
};// 具体工厂:Windows风格
class WinFactory : public GUIFactory {
public:Button* createButton() override { return new WinButton(); }
};// 具体工厂:Mac风格
class MacFactory : public GUIFactory {
public:Button* createButton() override { return new MacButton(); }
};// 客户端代码
void Application(GUIFactory& factory) {Button* btn = factory.createButton();btn->render();delete btn;
}int main() {WinFactory win;MacFactory mac;Application(win); // 输出:Windows Style ButtonApplication(mac); // 输出:MacOS Style Buttonreturn 0;
}

**优势:**遵循开闭原则,新增产品无需修改现有工厂。

  1. 抽象工厂模式(Abstract Factory)
    用于创建产品族(多组相关对象),确保产品间的兼容性。
#include <iostream>// 抽象产品:按钮
class Button { /* 同工厂方法示例 */ };// 抽象产品:文本框
class TextBox {
public:virtual void input() = 0;virtual ~TextBox() = default;
};// Windows组件
class WinButton : public Button { /* ... */ };
class WinTextBox : public TextBox {
public:void input() override { std::cout << "Windows TextBox\n"; }
};// Mac组件
class MacButton : public Button { /* ... */ };
class MacTextBox : public TextBox {
public:void input() override { std::cout << "MacOS TextBox\n"; }
};// 抽象工厂接口
class GUIFactory {
public:virtual Button* createButton() = 0;virtual TextBox* createTextBox() = 0;virtual ~GUIFactory() = default;
};// 具体工厂实现
class WinFactory : public GUIFactory {
public:Button* createButton() override { return new WinButton(); }TextBox* createTextBox() override { return new WinTextBox(); }
};class MacFactory : public GUIFactory {
public:Button* createButton() override { return new MacButton(); }TextBox* createTextBox() override { return new MacTextBox(); }
};// 使用示例
void CreateUI(GUIFactory& factory) {Button* btn = factory.createButton();TextBox* tb = factory.createTextBox();btn->render();tb->input();delete btn, delete tb;
}int main() {WinFactory winFac;MacFactory macFac;CreateUI(winFac); // 输出Windows系列组件CreateUI(macFac); // 输出Mac系列组件return 0;
}

适用场景:需要确保多个关联产品协同工作(如跨平台UI组件)。

工厂模式的选择策略

模式类型适用场景复杂度
简单工厂产品类型固定且数量较少
工厂方法需要支持新产品的灵活添加
抽象工厂需创建一组高度关联的复杂对象

总结:

工厂模式通过封装对象创建逻辑,显著提升了代码的可维护性和可扩展性。虽然在简单场景可能略显复杂,但其在大型项目或框架设计中能有效降低模块间的耦合度,是面向对象设计中不可或缺的利器。


文章转载自:

http://fdb2Cr56.rszbj.cn
http://6nChzuHS.rszbj.cn
http://bFpC5b73.rszbj.cn
http://KrlimQPv.rszbj.cn
http://aCDg11hf.rszbj.cn
http://5Gy0jxBL.rszbj.cn
http://DglFLBZT.rszbj.cn
http://9ImMHion.rszbj.cn
http://iHTedDj4.rszbj.cn
http://JbwYwXHe.rszbj.cn
http://Jl5wiQw6.rszbj.cn
http://kuyt9ieK.rszbj.cn
http://XSUUmeY2.rszbj.cn
http://QksjnYYk.rszbj.cn
http://IOPk0X1F.rszbj.cn
http://N5OYiAn9.rszbj.cn
http://3i5oPC03.rszbj.cn
http://cRftDhtI.rszbj.cn
http://rrPKfnPL.rszbj.cn
http://0hZaJfTV.rszbj.cn
http://OgAk9sKz.rszbj.cn
http://jCQmj6iL.rszbj.cn
http://l5rP5FoI.rszbj.cn
http://bXaTdGKS.rszbj.cn
http://fTH6EFue.rszbj.cn
http://aSQMzg1e.rszbj.cn
http://UmSgeg7V.rszbj.cn
http://daoELC79.rszbj.cn
http://WWo5byS4.rszbj.cn
http://pCmc5rsS.rszbj.cn
http://www.dtcms.com/wzjs/745039.html

相关文章:

  • 如何用dw做网站地图做推广网站多少钱
  • 做网站编写大兴模板网站建设
  • 宿州网站建设电话wordpress自动汉化
  • r语言做网站html5导航网站源码
  • 怎么刷网站点击量个人简介网页设计代码
  • 德安县建设局网站百度广告代运营公司
  • 简单网站制作教程开源房产网站源码
  • 网站备案幕布照片备案 网站
  • 网站源码怎样弄成网站wordpress 默认登陆
  • 邯郸建公司网站价格杭州百度快速排名提升
  • 租车网站建设方案网站版本功能列表
  • 直播视频网站开发长春新建火车站
  • 网站怎么广告投放国外电商网站如何做icp备案
  • 智林东莞网站建设公司百度引擎搜索网址
  • 信阳住房和城乡建设局网站响应式布局网站建设
  • 包头网站建设易通soso搜索引擎
  • 介绍几个免费的网站最好的搜索引擎排名
  • 广元建设网站要多少钱苏州网站制作
  • 怎么知道网站的ftp服装设计怎么学
  • wordpress能做图片站注册公司需要钱吗?多少费用
  • 遵义公司做网站专业建设标准
  • 做简约头像网站wordpress wp();
  • 网站建设初学升级不了wordpress
  • 太原百度seo排名软件seo网站建设方案
  • 开发网站语言别墅外观设计网站推荐
  • 网站制作布局策划案
  • wordpress不能播放wmv云南网站建设优化企业
  • 乐成高端网站建设沧州网站制作网站
  • 网站如何免费做SEO优化成都企业模板网站开发
  • 沈阳企业做网站推广码怎么填