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

建设规范文件在哪个网站发布像发微博 发wordpress

建设规范文件在哪个网站发布,像发微博 发wordpress,天津设计院排名,天津河北做网站的公司继 Day 1 学习了单例模式之后,今天我们继续深入对象创建型设计模式——工厂方法模式(Factory Method)。工厂方法模式为对象创建提供了更大的灵活性和扩展性,是实际开发中使用频率极高的一种设计模式。 一方面,我们将简…

继 Day 1 学习了单例模式之后,今天我们继续深入对象创建型设计模式——工厂方法模式(Factory Method)。工厂方法模式为对象创建提供了更大的灵活性和扩展性,是实际开发中使用频率极高的一种设计模式。

一方面,我们将简要回顾 Day 1 的单例模式,帮助建立起模式之间的连接;另一方面,重点学习如何通过工厂方法封装对象创建逻辑,做到"开闭原则"。


在这里插入图片描述

一、Day 1 回顾:单例模式

单例模式的核心要点:

  • 保证类的唯一实例
  • 提供一个全局访问点
  • 常见实现包括懒汉式、饿汉式、静态内部类、双重检查锁等。
  • 推荐 C++11 使用局部静态变量方式实现线程安全单例。

代码示例(局部静态单例):

class Logger {
private:Logger() {}
public:static Logger* getInstance() {static Logger instance;return &instance;}void log(const std::string& msg) {std::cout << "[LOG]: " << msg << std::endl;}
};

二、本日主题:工厂方法模式

1. 意图说明

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

核心解决:将对象创建的控制权下放到子类中


2. 结构与角色

+-------------------+       +---------------------+
|   Product         |<------+  ConcreteProductA   |
+-------------------+       +---------------------+^                         ^|                         |
+--------------+        +------------------+
| Factory      |<-------| ConcreteFactoryA |
+--------------+        +------------------+
| + create()   |        | + create()       |
+--------------+        +------------------+
  • Product:抽象产品类
  • ConcreteProduct:具体产品类
  • Factory:抽象工厂类,声明工厂方法
  • ConcreteFactory:具体工厂类,负责生产具体产品

3. 示例:日志系统的多种实现

我们希望在程序中根据不同配置,使用不同类型的日志(如控制台日志、文件日志等)。使用工厂方法模式如下:

(1) 抽象产品接口
class Logger {
public:virtual void log(const std::string& msg) = 0;virtual ~Logger() {}
};
(2) 具体产品实现
class ConsoleLogger : public Logger {
public:void log(const std::string& msg) override {std::cout << "[Console] " << msg << std::endl;}
};class FileLogger : public Logger {
public:void log(const std::string& msg) override {// 简化处理,真实应写入文件std::cout << "[File] " << msg << std::endl;}
};
(3) 工厂接口
class LoggerFactory {
public:virtual Logger* createLogger() = 0;virtual ~LoggerFactory() {}
};
(4) 具体工厂类
class ConsoleLoggerFactory : public LoggerFactory {
public:Logger* createLogger() override {return new ConsoleLogger();}
};class FileLoggerFactory : public LoggerFactory {
public:Logger* createLogger() override {return new FileLogger();}
};
(5) 客户端使用
void testFactory(LoggerFactory* factory) {Logger* logger = factory->createLogger();logger->log("This is a test message.");delete logger;
}int main() {ConsoleLoggerFactory consoleFactory;testFactory(&consoleFactory);FileLoggerFactory fileFactory;testFactory(&fileFactory);return 0;
}

4. 优缺点总结

✅ 优点:
  • 满足开闭原则:新增产品时只需添加新工厂和产品类,无需改动原有逻辑。
  • 屏蔽具体产品类,解耦创建逻辑与使用逻辑。
❌ 缺点:
  • 类的数量增多:每种产品都需要对应工厂类。
  • 结构相对复杂,不适合产品类型单一的简单场景。

三、适用场景总结

场景原因
日志模块支持多种输出方式控制台、文件、网络输出分开实现
图像加载库支持多种格式不同格式(PNG/JPEG/GIF)封装为产品类
数据库驱动连接MySQL/PostgreSQL/SQLite 等切换方便

四、今日练习题

✍️ 题目一:

设计一个简化的图像解码系统,要求支持解码 PNG 和 JPEG 图像,使用工厂方法模式设计产品与工厂类结构。

✍️ 题目二:

工厂方法模式如何比简单工厂模式更符合开闭原则?请结合实际项目经验说明。


五、滚动复习:Day 1 要点回顾

  • 单例模式确保类只有一个实例,常用于日志、配置、线程池等场景;
  • 推荐使用 C++11 局部静态变量实现线程安全单例;
  • 注意拷贝构造与赋值运算符需禁用;
  • 单例不易测试,可能违反开闭原则。

六、小结与展望

今天我们学习了工厂方法模式,掌握了如何将对象创建交给子类工厂完成,以提高系统的灵活性和可扩展性。明日我们将学习抽象工厂模式(Abstract Factory),它是工厂方法模式的进一步扩展,适用于产品族的创建场景。

持续学习,稳步进阶,设计模式每天一点点,收获将是长远的代码质量提升与架构思维成长。


文章转载自:

http://c34t7zqr.dtzsm.cn
http://y3bPb30y.dtzsm.cn
http://vEcmxuJL.dtzsm.cn
http://F0OUTcOi.dtzsm.cn
http://8QJTV4RE.dtzsm.cn
http://kXp75EkT.dtzsm.cn
http://iBEFxY3L.dtzsm.cn
http://nbF0Q6N3.dtzsm.cn
http://RPbssX2L.dtzsm.cn
http://FTDMYGvm.dtzsm.cn
http://tVw5xGgQ.dtzsm.cn
http://s2WBgN0K.dtzsm.cn
http://obCItMy9.dtzsm.cn
http://vOOCFybf.dtzsm.cn
http://nVHFZRbf.dtzsm.cn
http://thxtqN6z.dtzsm.cn
http://eA1Y197d.dtzsm.cn
http://L8NpLj6Z.dtzsm.cn
http://jbOkdClu.dtzsm.cn
http://ld5vmIl5.dtzsm.cn
http://7vJIdVqI.dtzsm.cn
http://CxRJZ9kb.dtzsm.cn
http://ccAdEHzP.dtzsm.cn
http://QwhGwqD8.dtzsm.cn
http://njaK8sI4.dtzsm.cn
http://9buRfttv.dtzsm.cn
http://rEedSIHi.dtzsm.cn
http://TMKX4xz4.dtzsm.cn
http://lP4f75y1.dtzsm.cn
http://nkDmdDN3.dtzsm.cn
http://www.dtcms.com/wzjs/677587.html

相关文章:

  • 网站开发名列前茅网站怎么做用户体验
  • 怎么建设属于自己的网站爱做网站视频
  • 昆山 网站建设小白网站建设教程
  • 有网站教做水电资料吗阿里云域名注册好后怎么建设网站
  • 做网站需要域名 域名是啥论坛网站建设软件
  • 做html5网站教育网站集群建设申请
  • 装修公司网站平台网站流量工具
  • 网站开发中视屏怎样编辑到网页上广州开发区人才交流服务中心
  • 英文网站建设服务合同网站推广需要多少钱
  • 科研院所网站建设公司网站制作商
  • 网站建设创新能力痛点网站推广策略
  • 百度怎样做网站并宣传网站163邮箱入口
  • 企业网站的建设要注意哪些方面wordpress 标题描述
  • 网站建设 我们是专业的资讯门户类网站模板
  • 沧州企业网站200款软件大全
  • php如何做音乐网站河北建设网站首页
  • it公司怎么在国外网站做宣传长春做网站哪家好
  • 长春公司做网站找哪个公司好企业推广视频
  • 个人主页网站欣赏用自己电脑做服务器 网站
  • 个人网站建设价格普洱做网站的报价
  • 如何做挂qq的网站重庆建站公司网站模板
  • 上海电信网站备案深圳网站制作建设服务公司
  • 服装html网站模板下载wordpress注册用户邮件验证
  • 网站建设是否包含等保软件论坛网站有哪些
  • 大王庄网站建设公司天津网站优化实战
  • 手机网站制作流程信息发布网
  • 网站关键词指数查询工具公司做的网站入哪个会计科目
  • 怎么用电脑做网站服务器html5软件下载手机版
  • 成都网站建设询q479185700霸屏做网站的会计分录
  • 网站建设静态代码wordpress 隐形按钮