创建型设计模式(工厂、builder、原型、单例)

  1. 工厂模式
    a. 是一种创建型设计模式,它提供了在父类中创建对象的接口,但允许子类改变将要创建的对象的类型。工厂方法的核心目标是:解耦对象创建与使用。把构建对象new对象的过程放在子类中进行,可以返回不同类型的对象,所有的对象都使用同一个接口
    b. 不使用工厂的缺点:修改成本高,有很多if-else的逻辑,违反了开闭原则
    c. 重点
    ⅰ. 创建一个抽象接口
    ⅱ. 创建具体的对象
    ⅲ. 声明工厂方法:父类的抽象方法创建的对象可以返回一个默认值,或者是直接是一个抽象方法
    d.
  2. Builder模式
    a. 重点
    ⅰ. build接口--定义类一系列build方法,对应每个产品的set方法,build1就是对应产品1,build2对应产品2,每个build生产不同的产品。相当于把set过程抽象出来,真正set的时候是通过director控制
    ⅱ. directot类--负责控制构造对象的流程,负责接收builder参数,通过不同director创建不同产品类型,director不关心具体的build怎么构造,只关心builder的构造过程
    ⅲ. 当构造参数很多个,很复杂的时候就需要把对象构造过程和使用过程隔离开,通过builder和director进行交互。更符合单一职责和开闭原则的模式
  3. 原型
    a. 原型是一种创建模型,允许你复制现有对象,而不用创建新的对象
    b. 假设有一个对象,需要创建这个对象的副本,这时候就很适合用原型这种设计模式,不需要一定访问对象的私有方法,私有字段。不需要明确这个对象内部的所有细节信息,就直接复制即可。把克隆的过程委托给要被复制的对象,它有一个clone接口,复制对象,但是不需要把复制过程和调用过程相耦合。
    c. 首先抽象类implement了cloneable,这样接口就可以被复制了。具体的子类扩展抽象类里面的方法,调用父类拷贝构造,设置自身特有属性和字段
  4. 单例模式
    a. 单例模式是面试中经典问题,单例模式是一种经典创建型模式,它可以确保一个类只创建一个对象,同时为该实例提供全局访问点
    b. 单例要保证的问题:
    ⅰ. 确保一个类只有一个实例
    ⅱ. 为该实例提供全局访问点
    c. 保证上面解决方案的步骤:
    ⅰ. 为什么只需要一个实例(例如对一些共享内容做控制,例如访问数据库资源,已经创建了一个链接数据库的对象,又想创建一个相同的对象是不允许的)
    ⅱ. 用全局变量是很方便的,允许程序从任何位置访问这个全局变量,但是又不需要任何地方都可以修改这个变量,把变量声明成为volatile,因为这个例如数据库创建过程是会经常被多线程调用的,所以要申明为volatile,禁止指令重排(初始化对象分为3步:分配内存、初始化对象、写入引用)重排序会让这三个过程顺序改变可能导致拿到一个没有完全初始化好的对象,保证多线程之间的可见性(保证线程的本地缓存和主内存一致,确保所有线程看到的都一样);另外一个就是双重检查,如果变量为null的时候,就加锁,synchronized加完锁之后再去创建对象
相关推荐
孟陬几秒前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
GoGeekBaird4 分钟前
别再给每个 AI 做自我介绍了:我做了一个「个人上下文」管理系统
后端·github·agent
码事漫谈18 分钟前
腾讯混元 Hy4 正式版发布了
后端
Mikko719 分钟前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.25 分钟前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff37 分钟前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
拆房老料2 小时前
DeepSeek Super-agent 架构解析:从单任务 Agent 到持续运行的任务系统
人工智能·设计模式·系统架构
苍何2 小时前
DeepSeek的Super-agent 设计,和我们的工程实践
后端
Patrick_Wilson2 小时前
第一次读 Go 项目:从两个源码文件弄清 package、import 和 go.mod
后端·go·编程语言
代码山河2 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目