设计模式之创建型5种

news/2025/3/31 9:15:06/

设计模式

为什么设计模式是23种

设计模式之所以被归纳为23种,而非其他数量,源于GoF(Gang of Four)在1994年的系统性总结和分类。这一数量的确定并非偶然,而是基于以下核心原因:

  1. 他们遵循“大三律”(Rule of Three),即只有经过三个以上不同类型系统的验证,一个模式才能被纳入经典体系。最终符合这一严格标准的模式共23种。
  2. 3种模式被划分为三类:==​创建型(5种)、结构型(7种)、行为型(11种)==​。这种分类基于模式的核心目标(对象创建、结构组合、行为协作),覆盖了当时软件开发中的主流场景,形成逻辑自洽的体系
  3. 那随着技术的发展,比如MVC模式属于新的方向 但并未纳入,也就是说GoF的23种模式是基于特定历史阶段的经验总结,而非永恒不变

创建型 对象创建

在这里插入图片描述

  1. 单例模式(Singleton)
    核心思想:确保类只有一个实例,并提供全局访问点
    C# 实现关键:私有构造函数 + 静态实例 + 线程安全控制
//懒汉式(双重检查锁) 特点:延迟初始化,线程安全,适用于高并发场景
public sealed class Singleton
{private static Singleton _instance;private static readonly object _lock = new object();// 私有构造函数private Singleton() { }public static Singleton Instance{get{if (_instance == null){lock (_lock){if (_instance == null){_instance = new Singleton();}}}return _instance;}}
}
//饿汉式(静态初始化)类加载时即初始化,线程安全,但可能造成资源浪费
public sealed class Singleton
{// CLR 保证静态初始化的线程安全private static readonly Singleton _instance = new Singleton();private Singleton() { }public static Singleton Instance => _instance;
}
  1. 工厂方法模式(Factory Method)
    核心思想:定义一个创建对象的接口,由子类决定实例化哪个类。
    C# 实现关键:抽象工厂类 + 具体产品类 + 多态
    核心价值在于隔离变化点,适用于对象创建逻辑复杂、类型可能扩展的场景
    场景案列:数据库访问解耦/插件系统动态加载/支付方式多态选择/UI控件主题化创建
// 抽象产品</

http://www.ppmy.cn/news/1583801.html

相关文章

VMware安装Ubuntu实战分享:从下载到桌面的完整指南

一、准备工作&#xff1a;兵马未动&#xff0c;粮草先行 1. 所需装备清单 VMware Workstation&#xff1a;推荐16 Pro版&#xff08;打工人用Player免费版也行&#xff09;Ubuntu镜像&#xff1a;官网下载LTS版&#xff08;长期支持版&#xff0c;稳如老狗&#xff09;电脑配…

双周报Vol.68: Bytes模式匹配增强、函数别名上线、IDE体验优化...核心技术迎来多项更新升级!

2025-03-24 语言更新 Bytes 现在可以使用 array pattern 进行模式匹配 fn main {let bytes : Bytes "Hello, world!";match bytes {[..b"Hello", ..] > {println("Starts with \"Hello\"");}_ > {println("Doesnt star…

Serverless架构的应用场景

以下是Java中Serverless架构的应用场景、搭建步骤以及案例: Java在Serverless架构中的应用 1. 事件驱动的数据处理 Java代码可以作为函数运行,响应各种事件源,如HTTP请求、消息队列、数据库更改等。例如,AWS Lambda支持Java,用户可以将Java代码部署为函数,处理这些事件…

GR00T N1:通才人形机器人的开放基础模型(上)

25年3月来自Nvidia的论文“GR00T N1: An Open Foundation Model for Generalist Humanoid Robots”。 通用机器人需要多功能的身体和聪明的头脑。人形机器人的最新进展显示出作为在人类世界中构建通才自主性硬件平台的巨大潜力。在大量多样化数据源上训练的机器人基础模型&…

Python 实现机器学习小项目实战教程*

markdown 复制 Python 实现机器学习小项目实战教程 本教程将通过一个完整的机器学习项目案例&#xff0c;从数据预处理到模型部署&#xff0c;帮助初学者快速掌握机器学习核心流程。项目以经典的鸢尾花分类为例&#xff0c;使用 Scikit-learn 库实现。 1. 项目概述 目标 构…

【JavaScript】闭包笔记

闭包是什么&#xff1f; 定义 闭包&#xff08;Closure&#xff09;是指函数可以访问其外部函数作用域中的变量。当一个函数在其外部函数的作用域内被调用时&#xff0c;它会“记住”外部作用域的变量&#xff0c;并且可以在函数外部依然访问到这些变量。 为什么叫闭包&…

Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(六)

为 D3D12 运行时设置 LDA 状态 为 D3D12 运行时启用或禁用 LDA 时&#xff0c;UMD 需要将正确的层和节点映射信息返回到运行时。 代码流如下所示&#xff1a; D3D12 从 UMD 获取 D3D12_CROSS_NODE_SHARING_TIER 上限。D3D12 通过调用 D3DKMTQueryAdapterInfo&#xff08;KMTQ…

1、pytest基本用法

目录 先给大家分享下学习资源 1. 安装pytest 2. 编写用例规则 3. 执行用例 最近在学习pytest的用法 并且用这套框架替换了原来的unittest&#xff0c; 同是测试框架 确实感觉到pytest更加便捷 这边分享给大家我得学习心得 先给大家分享下学习资源 1 官方文档 pytest 官方…