• 温故知新《设计模式》创建型模式


    在这里插入图片描述

    设计模式是一种思想,一个让自己写的代码更有质量更加的优美,但在实际开发中并没有正在的去使用他们,大多都是一股脑的快速实现一个业务需求,并没有考虑代码的扩展性、健壮性、开闭原则、单一原则等等。那样的代码就像一坨一坨的,写完再也不想再见到它。为了使自己代码质量得到提升,设计模式有必要深入探索。

    设计模式三大类
    • 创建型模式
    • 结构型模式
    • 行为型模式
    创建型模式分类

    创建型具体的实现可分为5中模式

    1. 工厂模式
    2. 抽象工厂模式
    3. 创造者模式
    4. 原型模式
    5. 单例模式
    模式的理解概述

    根据博主自己学习理解的加以概述,或许看一次并不能真正运用在实际开发中,但如果知道每一种模式适用的场景和大致的实现结构,倘若有类似的业务场景岂不是一个好的方向,并更加以深入某一模式研究学习,或许那就是自己转变的一个关键点。

    1. 工厂模式:该模式相对是比较常用,适用的业务场景也比较的多

    适用场景:现在许多系统都有积分机制,通过完成不同的任务获得不等的积分,那么用户累计获得的积分可可以用户获取不同的奖品(兑换实体商品、兑换优惠券、兑换腾讯视频月卡…),虽然都是兑换操作,但所操作的兑换东西类型完全不同。所以我们只需要定义统一的入参,创建一个兑换工厂类,不同类型的兑换物分别实现工厂类,最后通过传入的类型来区分使用那一种兑换实现类即可。

    扩展性:如果后期有新增的兑换类型,则可在实现兑换工厂类接口即可,不会改动已有的逻辑。

    缺点:可能随着类型的增加,会创建很多的实现类,可根据实际得业务场景进行跳转或结合其他模式混合使用

    1. 抽象工厂模式

    适用场景:系统中已经存在的功能,现在需要进行升级优化,但系统中许多的业务线都在使用同一个功能,不能对原有的接口进行修改(替换redis双集群升级)。那么我们就把该功能的接口单独在抽象出来,新的方案再去实现这个抽象接口,多个方案则创建多个实现类。具体通过jdk的动态代理机制和Java的反射机制进行接口的代理。调用之前的接口但通过代理类传入不同的实现类对象class,从而代理到具体的实现方案上。

    抽象工厂其实是一个中心工厂, 创建其他工厂模式

    1. 创造者模式

    适用场景:快餐店的套餐选配场景、或者各项装修物料组合套餐选配场景。提前创建和各个单项的实体属性对象,再实现一个各个单项包加购方法逻辑类,再来一个加购填充单项的方法构建类,多个不同的套餐则在构建类中创建多个单项填充方法,要获取哪一个套餐则只需调用需要的构建方法即可。如果有新增的套餐,则只需要在构建类中新增方法并填充,不会影响其他套餐逻辑。

    大大提升扩展性、单一原则的体现

    1. 原型模式

    适用场景:上机考试多套试,每人题目和答案乱序排列场景。博主现实遇到过的场景就是驾校科一科四上机考试,每个考生试题的顺序都是随机从题库中抽取(这个场景只是抽取了一部分考题,并不是题库额全部考题),确保考试的公平性。具体的实现是通过java中的clone机制进行。每个考生复制一套原始题库数据,再对复制的题库进行顺序随机重排并生成试卷。

    注1:具体的逻辑博主在学习这个模式时,疑惑的点是用直白的代码实现和通过原型模式实现区别不是很大,直白实现加个随机试题工具方法不使用clone机制感觉问题也不大,或许是自己还没理解透彻。

    注2该模式实际业务场景很少见,可适当了解,真有该业务场景再来深入研究即可

    1. 单例模式

    使用场景:1.项目中定义的全局变量 2.数据库的连接池 3.spring中的单例模式bean的使用与生成

    分类:

    1. 懒汉模式(线程不安全)
    2. 懒汉模式-加锁(线程安全)
    3. 饿汉模式(线程安全、但浪费资源)
    4. 静态内部类 (线程安全、加锁不消化性能)(因为JVM虚拟机可以保证多线程并发访问的正确性,也就是一个类的构造方法在多线程环境下可以被正确的加载)(推荐使用
    5. 双重锁模式 (线程安全、懒汉双重锁-相对减少了资源的浪费)
    6. CAS (线程安全)
    7. 枚举单列模式(线程安全、代码实现少)
    后语

    设计模式之创建型模式算是告一段落了,理解后再去实践把它用到熟能生巧才是真正的掌握。
    下一站:设计模式之结构型模式

  • 相关阅读:
    K8S环境搭建
    uniapp中使用图片网络路径使用不了解决方法
    华为nova10Pro和华为nova9Pro有哪些区别 哪个性能更强
    这是你没见过的MindSpore 2.0.0 for Windows GPU版
    云原生Kubernetes:kubectl管理命令
    UE4 C++:UFUNCTION宏、函数说明符、元数据说明符
    C语言程序设计教程(第三版)李凤霞 第十章课后习题答案
    七、垃圾收集中级
    CTFshow-PWN-栈溢出(pwn44)
    【C# 窗体 超市购物买单系统】简单版和进阶版
  • 原文地址:https://blog.csdn.net/qq_39818325/article/details/126862293