设计模式深度解析:单例模式与原型模式的深度探索之旅

在这里插入图片描述​🌈 个人主页:danci_
🔥 系列专栏:《设计模式》
💪🏻 制定明确可量化的目标,坚持默默的做事。


设计模式深度解析:单例模式与原型模式的深度探索之旅

探索设计模式的魅力:“感受单例模式的力量与神秘” - 掌握编程的王牌技巧文章浏览阅读10k次,点赞44次,收藏42次。在软件开发的赛场上,单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员,它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱,从历史渊源到现代应用,从基础实现到高级技巧,经过戏剧性的转折和层层推进,我们将一步步揭开这一模式背后的秘密。文章串起时间的线索,带你重回单例模式的起源,理解它在软件工程历史中的地位。经过时间的流逝,单例模式不仅保持了其原有的魅力,而且随着新的编程语言和技术的发展,还展示出了新的活力和应用场景。https://blog.csdn.net/danci_/article/details/135687924

探索设计模式的魅力:一次设计,多次利用,深入理解原型模式的设计艺术文章浏览阅读16k次,点赞126次,收藏83次。原型模式是一种设计模式,属于创建型模式的一种,它用于创建重复的对象,同时又能保持性能。在原型模式中,通过复制现有对象的原型来创建新对象,而不是通过实例化类来创建对象。这样做可以避免耗费过多的资源开销,特别是在对象的创建过程比较复杂或耗时的情况下。
在原型模式中,原型对象实现一个克隆方法(Clone)用于复制自身,当需要创建新对象时,就可以通过克隆原型对象来得到一个新的对象副本。原型模式通常包括浅拷贝和深拷贝两种形式,浅拷贝只复制对象本身,而深拷贝则会连同对象引用的其他对象一起复制,因此能够得到完全
https://blog.csdn.net/danci_/article/details/135739260

一、定义🌐

在这里插入图片描述

单例模式:独一无二的存在 🤔

✨ 通过确保类的唯一实例存在和全局可访问性,实现资源的有效管理和全局状态的统一控制。

 作用

在软件设计中,单例模式通过将构造函数私有化、创建静态私有变量以及提供公共的静态方法来获取实例等方式,确保了类的唯一实例的创建和访问。这种方式可以有效地节省系统资源,避免因为创建多个实例而导致的资源浪费和性能下降。

 如何封装对象的创建过程
    单例模式是一种巧妙的设计,它通过封装对象的创建过程,确保一个类在应用中只有一个实例,并提供一个全局访问点来获取这个实例。下面是对单例模式如何封装对象创建过程的详细描述:👇
  1. 隐藏构造函数:
    单例模式将类的构造函数私有化(设为私有或者受保护的),这样外部代码就无法直接通过new关键字来创建类的实例。通过隐藏构造函数,单例模式限制了外部对类实例化的权限,从而确保整个应用中只能通过特定的途径来获取类的实例。

  2. 提供静态访问方法:
    单例模式提供了一个静态的访问方法(通常是getInstance()方法),用于获取类的唯一实例。这个方法首先检查类的实例是否已经存在,如果存在则直接返回这个实例;如果不存在,则通过私有构造函数创建一个新的实例,并将其保存在一个静态的私有变量中,然后再返回这个实例。

  3. 确保线程安全:
    在多线程环境下,如果不采取适当的同步措施,可能会出现多个线程同时创建实例的情况,从而破坏单例的唯一性。因此,单例模式通常会通过双重检查锁定(double-checked locking)或其他线程安全机制来确保getInstance()方法的线程安全。

  4. 延迟实例化:
    有些单例模式的实现采用了延迟实例化的策略,即getInstance()方法第一次被调用时才创建类的实例。这种策略的好处是可以节省系统资源,因为只有当类的实例真正被需要时才会被创建。

    通过封装对象的创建过程,单例模式提供了一种机制,使得开发者能够控制对象的创建和访问,从而实现了资源的有效管理和代码的简洁性。单例模式常用于那些只需要一个实例的类,如配置管理类、日志记录类、线程池类等。

原型模式:复制的艺术 😉

✨ 利用复制机制来简化对象的创建过程,提高开发效率,并保证新对象的正确性和一致性。

 作用

减少重复劳动和资源浪费。它允许开发者直接复用已有对象的状态和行为,从而避免不必要的重复初始化操作。同时,通过复制现有对象,原型模式可以生成复杂对象的精确副本,保证了新对象与原型对象在功能和行为上的一致性。

 如何封装对象的创建过程
    通过定义一个原型接口,并允许子类实现接口的克隆方法。这个过程确保了当我们需要创建新对象时,不必通过传统的构造器,而是直接利用已有的原型对象进行复制。
    具体来说,原型模式封装对象创建过程的方式如下:👇
  1. 定义原型接口:
    ✨ 这个接口声明了一个克隆自身的方法,通常是 clone()。所有具体原型类都将实现这个接口,并提供具体的克隆方法实现。

  2. 实现克隆方法:
    ✨ 每个具体的原型类都需要实现 clone() 方法,该方法负责创建并返回原型对象的一个副本。这个副本通常是通过深拷贝(deep copy)得到的,以确保新对象与原对象在内存上是完全独立的,修改新对象不会影响到原对象。

  3. 通过复制原型来创建新对象:
    ✨ 当需要创建新对象时,客户端代码不再通过调用构造器,而是直接获取一个原型对象,并调用其 clone() 方法来得到一个新的对象。由于这个过程是封装在原型对象内部的,客户端代码不需要关心对象是如何被创建的,只需关注如何使用复制得到的新对象。

  4. 提供全局访问点:
    ✨ 通常会有一个工厂方法或类似机制来充当全局访问点,负责创建并返回原型对象的实例。这样,客户端代码就可以通过这个访问点来获取原型对象,并进行复制操作。

    通过这种方式,原型模式将对象的创建过程封装在原型对象内部,对外提供了统一的接口来创建新对象。这使得对象的创建过程更加灵活和可控制,同时减少了客户端代码与具体对象创建逻辑的耦合度。

    原型模式在需要频繁创建相似对象或对象创建过程比较复杂的情况下非常有用。例如,在需要大量相似但又不完全相同对象的游戏开发中,可以使用原型模式来快速生成游戏中的角色或道具。

模式对比

评论 298
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值