微信公众号素材网站营销导向的企业网站建设步骤

张小明 2026/1/19 20:42:52
微信公众号素材网站,营销导向的企业网站建设步骤,企业网站管理系统模板,安徽元鼎建设工程网站前言#xff1a;C代码设计模式总共有23种#xff0c;分为创建型模式、结构型模式和行为模式。本文针对常用的单例模式、简单工厂模式、工厂方法模式和抽象工厂模式进行介绍。 目录 一、为什么需要设计模式 二、单例模式 三、简单工厂模式 四、工厂方法模式 五、抽象工厂…前言C代码设计模式总共有23种分为创建型模式、结构型模式和行为模式。本文针对常用的单例模式、简单工厂模式、工厂方法模式和抽象工厂模式进行介绍。目录一、为什么需要设计模式二、单例模式三、简单工厂模式四、工厂方法模式五、抽象工厂模式一、为什么需要设计模式C 需要设计模式核心是解决其面向对象编程OOP的痛点、适配底层开发场景同时弥补语言原生特性的不足。设计模式为 C 提供了 “标准化的解决方案”让代码从 “随意写” 变成 “按规则写”提升了C代码的工程化能力。二、单例模式1定义保证一个类仅有一个实例并对外提供一个全局访问点来访问这个实例2目的解决 “对象重复创建” 问题尤其适用于管理唯一的硬件资源如 MCU 的时钟模块3优缺点优点是 省资源全局访问使用方便。缺点是 无法扩展违背“开闭原则”可参考SOLID软件设计原则 解析-CSDN博客耦合度高全局访问大大增加了出错的概率。4C示例饿汉式单例饿汉式在程序启动时静态变量初始化阶段就创建实例天生线程安全但可能会造成资源浪费如果实例从未被使用。#include iostream class SingletonHungry { private: // 私有构造函数禁止外部创建对象 SingletonHungry() { std::cout 饿汉式单例构造 std::endl; } // 禁用拷贝构造和赋值运算符防止实例被复制 SingletonHungry(const SingletonHungry) delete; SingletonHungry operator(const SingletonHungry) delete; // 静态成员变量程序启动时初始化全局区 static SingletonHungry instance; public: // 全局访问点返回唯一实例 static SingletonHungry getInstance() { return instance; } // 测试方法 void doSomething() { std::cout 饿汉式单例执行操作 std::endl; } }; // 静态成员变量初始化类外定义 SingletonHungry SingletonHungry::instance; // 测试 int main() { // 获取实例并调用方法 SingletonHungry s1 SingletonHungry::getInstance(); SingletonHungry s2 SingletonHungry::getInstance(); // 验证是否是同一个实例地址相同 std::cout s1 地址: s1 std::endl; std::cout s2 地址: s2 std::endl; s1.doSomething(); return 0; }懒汉式单例懒汉式是按需初始化第一次调用getInstance()时创建实例C11 及以上版本中局部静态变量的初始化是线程安全的这是最简洁且推荐的写法。#include iostream class SingletonLazy { private: // 私有构造函数 SingletonLazy() { std::cout 懒汉式单例构造 std::endl; } // 禁用拷贝和赋值 SingletonLazy(const SingletonLazy) delete; SingletonLazy operator(const SingletonLazy) delete; public: // 全局访问点局部静态变量C11 线程安全 static SingletonLazy getInstance() { static SingletonLazy instance; // 第一次调用时初始化仅初始化一次 return instance; } // 测试方法 void doSomething() { std::cout 懒汉式单例执行操作 std::endl; } // 析构函数可选用于验证析构时机 ~SingletonLazy() { std::cout 懒汉式单例析构 std::endl; } }; // 测试 int main() { // 第一次调用创建实例 SingletonLazy s1 SingletonLazy::getInstance(); // 第二次调用返回已创建的实例 SingletonLazy s2 SingletonLazy::getInstance(); std::cout s1 地址: s1 std::endl; std::cout s2 地址: s2 std::endl; s1.doSomething(); return 0; }三、简单工厂模式1定义一个工厂类根据传入的参数动态创建不同的产品类实例产品类需继承同一个抽象类 / 接口。2目的将 “对象创建逻辑” 和 “业务逻辑” 分离避免在业务代码中直接new不同的产品对象。3优缺点优点是 简化对象创建产品创建与业务逻辑解耦。缺点是 工厂职责过重如新增产品需修改代码违背“开闭原则”可参考SOLID软件设计原则 解析-CSDN博客。4C示例#include iostream #include string #include memory // 抽象产品图形 class Shape { public: virtual void draw() const 0; virtual ~Shape() default; }; // 具体产品圆形/矩形 class Circle : public Shape { public: void draw() const override { std::cout 绘制圆形 std::endl; } }; class Rectangle : public Shape { public: void draw() const override { std::cout 绘制矩形 std::endl; } }; // 简单工厂一个工厂创建所有产品 class ShapeFactory { public: static std::unique_ptrShape createShape(const std::string type) { if (type circle) return std::make_uniqueCircle(); if (type rectangle) return std::make_uniqueRectangle(); return nullptr; } }; // 测试 int main_simple_factory() { auto circle ShapeFactory::createShape(circle); if (circle) circle-draw(); // 输出绘制圆形 auto rect ShapeFactory::createShape(rectangle); if (rect) rect-draw(); // 输出绘制矩形 return 0; }四、工厂方法模式1定义将 “产品创建” 延迟到具体工厂子类中每个产品对应一个工厂子类核心工厂类只定义创建产品的接口。2目的解决简单工厂 “修改工厂代码” 的问题新增产品只需新增工厂子类。3优缺点优点是 符合 “开闭原则”便于维护。缺点是 逻辑较复杂类数量翻倍产品工厂占用更多内存。4C示例#include iostream #include memory // 抽象产品图形 class Shape { public: virtual void draw() const 0; virtual ~Shape() default; }; // 具体产品圆形/矩形 class Circle : public Shape { public: void draw() const override { std::cout 绘制圆形 std::endl; } }; class Rectangle : public Shape { public: void draw() const override { std::cout 绘制矩形 std::endl; } }; // 抽象工厂图形工厂 class ShapeFactory { public: virtual std::unique_ptrShape createShape() const 0; virtual ~ShapeFactory() default; }; // 具体工厂圆形工厂/矩形工厂 class CircleFactory : public ShapeFactory { public: std::unique_ptrShape createShape() const override { return std::make_uniqueCircle(); } }; class RectangleFactory : public ShapeFactory { public: std::unique_ptrShape createShape() const override { return std::make_uniqueRectangle(); } }; // 测试 int main_factory_method() { std::unique_ptrShapeFactory circleFactory std::make_uniqueCircleFactory(); auto circle circleFactory-createShape(); circle-draw(); // 输出绘制圆形 std::unique_ptrShapeFactory rectFactory std::make_uniqueRectangleFactory(); auto rect rectFactory-createShape(); rect-draw(); // 输出绘制矩形 return 0; }五、抽象工厂模式1定义创建一系列相关 / 依赖的“产品族”而不指定具体类。2目的解决“产品族”的创建问题保证同一产品族的组件能兼容使用。3优缺点优点是 产品族内组件兼容扩展性强。缺点是 最复杂的工厂模式类数量多占用内存大。4C示例#include iostream #include memory // 抽象产品1手机 class Phone { public: virtual void call() const 0; virtual ~Phone() default; }; // 具体产品1小米手机/华为手机 class XiaomiPhone : public Phone { public: void call() const override { std::cout 用小米手机打电话 std::endl; } }; class HuaweiPhone : public Phone { public: void call() const override { std::cout 用华为手机打电话 std::endl; } }; // 抽象产品2路由器 class Router { public: virtual void connect() const 0; virtual ~Router() default; }; // 具体产品2小米路由器/华为路由器 class XiaomiRouter : public Router { public: void connect() const override { std::cout 连接小米路由器 std::endl; } }; class HuaweiRouter : public Router { public: void connect() const override { std::cout 连接华为路由器 std::endl; } }; // 抽象工厂电子设备工厂生产手机路由器 class ElectronicFactory { public: virtual std::unique_ptrPhone createPhone() const 0; virtual std::unique_ptrRouter createRouter() const 0; virtual ~ElectronicFactory() default; }; // 具体工厂小米工厂/华为工厂生产对应品牌的产品族 class XiaomiFactory : public ElectronicFactory { public: std::unique_ptrPhone createPhone() const override { return std::make_uniqueXiaomiPhone(); } std::unique_ptrRouter createRouter() const override { return std::make_uniqueXiaomiRouter(); } }; class HuaweiFactory : public ElectronicFactory { public: std::unique_ptrPhone createPhone() const override { return std::make_uniqueHuaweiPhone(); } std::unique_ptrRouter createRouter() const override { return std::make_uniqueHuaweiRouter(); } }; // 测试 int main_abstract_factory() { // 小米工厂生产小米产品族 std::unique_ptrElectronicFactory xiaomiFactory std::make_uniqueXiaomiFactory(); auto xiaomiPhone xiaomiFactory-createPhone(); auto xiaomiRouter xiaomiFactory-createRouter(); xiaomiPhone-call(); // 输出用小米手机打电话 xiaomiRouter-connect();// 输出连接小米路由器 // 华为工厂生产华为产品族 std::unique_ptrElectronicFactory huaweiFactory std::make_uniqueHuaweiFactory(); auto huaweiPhone huaweiFactory-createPhone(); auto huaweiRouter huaweiFactory-createRouter(); huaweiPhone-call(); // 输出用华为手机打电话 huaweiRouter-connect();// 输出连接华为路由器 return 0; }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

白银市建设管理处网站建站公司跑路了域名怎么办

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 python-flask-django广州A公司生产制造执行系统的设计与实现_d7d1nw8p 项目技术简介 Python版…

张小明 2026/1/6 21:15:48 网站建设

织梦网站转移服务器wordpress po mo

3款高效LCD字模工具:从入门到精通的完整解决方案 【免费下载链接】三种取字模软件介绍 本开源项目提供三种高效实用的取字模软件:Img2Lcd、PCtoLCD2002和字模提取V2.2。这些工具专为液晶显示屏开发设计,能够将图像或字符转换为适合LCD显示的格…

张小明 2026/1/6 23:57:43 网站建设

经营性质网站网站平台开发报价单

Linly-Talker 支持 WebRTC 实现实时远程交互 在虚拟主播与智能客服逐渐走入日常的今天,用户早已不再满足于“播放预录视频”的数字人。他们期待的是能听、会说、有表情、可互动的“真人级”对话体验。然而,传统系统受限于高延迟、单向输出和部署复杂等问…

张小明 2026/1/12 21:33:35 网站建设

株洲网站建设 株洲网站制作深圳网站程序开发

SUSE Linux系统管理与软件操作指南 1. 磁盘空间查看 du 命令可以用来查看每个目录所占用的磁盘空间。以下是该命令的一个典型输出示例: 24K /var/log/cups 0 /var/log/news 3.3M /var/log/YaST2 0 /var/log/samba 0 /var/log/smpppd 8.3M /v…

张小明 2026/1/7 0:01:57 网站建设

盐城整站优化wordpress所见即所得

Keil生成Bin文件实战指南:从零配置到工程化落地在嵌入式开发的日常中,你是否也遇到过这样的场景?代码调试一切正常,断点能进、变量值正确,信心满满地准备烧录出厂——结果发现,Keil只给你一个.axf文件。而工…

张小明 2026/1/7 0:43:05 网站建设

怎么查公司网站有没有中文域名用wordpress建的网站

近日,由中科固源联合暨南大学网络空间安全学院打造的网络安全实战训练营圆满落幕!作为协议模糊测试领域的标杆企业,我们始终以 “技术赋能产业,人才驱动安全” 为使命,此次携手顶尖高校打造沉浸式训练营,正…

张小明 2026/1/17 11:25:51 网站建设