创建型设计模式(工厂、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加完锁之后再去创建对象
相关推荐
骄马之死7 小时前
SpringMVC + SpringBoot 核心知识点总结
java·spring boot·后端
zhengfei6117 小时前
第3章 Agent 类型分类与设计模式
设计模式
GoGeekBaird8 小时前
Anthropic技能"(Skills)的经验分享
后端
王码码20358 小时前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web
刀法如飞8 小时前
一文搞懂DDD 领域驱动设计思想原理
设计模式·架构·代码规范
郑洁文8 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
螺丝钉code9 小时前
JAVA项目 Claude code CLAUDE.md 到底应该怎么写
java·人工智能·claude code
指令集梦境10 小时前
Cursor + Spring Boot实战:从零写一个RESTful API
spring boot·后端·restful
摇滚侠10 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea