单例与原型 模式

定义:
  用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

  Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

  如何使用?因为Java中的提供clone()方法来实现对象的克隆(具体了解clone(),所以Prototype模式实现一下子变得很简单.

 以勺子为例:

  public abstract class AbstractSpoon implements Cloneable

  {

  String spoonName;

  public void setSpoonName(String spoonName) {this.spoonName = spoonName;}

  public String getSpoonName() {return this.spoonName;}

  public Object clone()

  {

  Object object = null;

  try {

  object = super.clone();

  } catch (CloneNotSupportedException exception) {

  System.err.println("AbstractSpoon is not Cloneable");

  }

  return object;

  }

  }

  有两个具体实现(ConcretePrototype):

  public class SoupSpoon extends AbstractSpoon

  {

  public SoupSpoon()

  {

  setSpoonName("Soup Spoon");

  }

  }

  public class SaladSpoon extends AbstractSpoon

  {

  public SaladSpoon()

  {

  setSpoonName("Salad Spoon");

  }

  }

  调用Prototype模式很简单:

  AbstractSpoon spoon = new SoupSpoon();

  AbstractSpoon spoon = new SaladSpoon();

  当然也可以结合工厂模式来创建AbstractSpoon实例。

***********************************************************************************************************

单例模式的要点有三个;

一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。

许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

1,饿汉式单例类

public class Singleton {

  private Singleton(){}

  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}

读者可以看出,在这个类被加载时,静态变量m_instance 会被初始化,此时类的私有构造子会被调用。这时候,单例类的惟一实例就被创建出来了。

2,懒汉式单例类

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //lazy initialization,不用每次都进行生成对象,只是第一次调用时初始Singleton 

  //使用时生成实例,提高了效率!

//但是没有第一种安全
  if (instance==null)
    instance=new Singleton();
  return instance;

}

}

在上面给出懒汉式单例类实现里对静态工厂方法使用了同步化,以处理多线程环境。同样,由于构造子是私有的,因此,此类不能被继承。饿汉式单例类在自 己被加载时就将自己实例化。即便加载器是静态的,在饿汉式单例类被加载时仍会将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。

  从速度和反应时间角度来讲,则比懒汉式单例类稍好些。然而,懒汉式单例类在实例化时,必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是 当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费时间。这意味着出现多线程同时首次引用此类的机率变得较大。

  饿汉式单例类可以在Java 语言内实现, 但不易在C++ 内实现,因为静态初始化在C++ 里没有固定的顺序,因而静态的instance 变量的初始化与类的加载顺序没有保证,可能会出问题。

转载于:https://www.cnblogs.com/j3eee/archive/2009/08/03/1537754.html

【17】软考软件设计师——创建型模式(一):单例与原型考点精讲与真题突破 本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第17篇,聚焦**模块三:设计模式专项**的核心创建型模式——单例模式与原型模式。文章系统讲解单例模式的懒汉式、饿汉式、双重检查锁三种核心实现,拆解原型模式的浅拷贝与深拷贝原理;结合软考真题规律,提炼线程安全单例的实现要点、拷贝类型的判断技巧,提供可直接套用的Java代码模板与克隆实战案例;覆盖上午题(模式特征判断、代码正误辨析)与下午题(代码填空、场景应用选择)核心考点,帮助考生精准掌握两类模式的考试重点,稳拿1~2分。 阅读详情

相关推荐

Win11下Edge浏览器CPU占用飙升?试试这5个隐藏设置(附实测对比图)

本文详细解析了Win11下Edge浏览器CPU占用飙升的原因,并提供了5个关键设置优化方案,包括禁用硬件加速、管理扩展程序等,有效降低资源消耗。实测数据显示优化后CPU占用显著下降,适合Win11用户提升浏览器性能。

weixin_29266679的博客 1516

spring注解设置单例和原型模式

spring默认是单例模式 import java.util.HashSet; import java.util.Set; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bi

Super的专栏 8877

从安装到跑通第一个例程:Halcon 20.11深度学习版环境搭建全记录

本文详细记录了Halcon 20.11深度学习版环境搭建的全过程,从安装配置到运行第一个例程,特别针对CUDA版本冲突、算子验证和样本数据预处理等常见问题提供解决方案。通过实战案例展示PCB缺陷分类流程,帮助工程师快速掌握工业级图像处理技术,提升深度学习模型在工业质检中的应用效率。

weixin_28739079的博客 222

单例模式看了就够了

1、饿汉式(线程安全,调用效率高,但是不能延时加载):public class ImageLoader{ private static ImageLoader instance = new ImageLoader; private ImageLoader(){} public static ImageLoader getInstance(){ ...

hukailee的专栏 590

Comsol 管道导波裂纹检测:从建模到求解的完整流程解析

本文详细解析了使用Comsol Multiphysics进行管道导波裂纹检测的完整仿真流程。从几何建模、材料定义、物理场设置到网格划分与求解后处理,系统阐述了如何构建高保真虚拟模型以模拟导波与裂纹的相互作用。重点分享了激励信号设置、频散效应处理及参数化扫描等实战技巧,旨在帮助工程师与研究人员高效优化无损检测方案,降低实验成本。

weixin_29207439的博客 74

SNAP计算哨兵二号的叶面积指数(LAI)

对于哨兵二号数据以及LANDSAT8数据,SNAP提供已经集成好的模块计算LAI。在Optical->Thematic Land Processing->Biopyhsical Processor目录下面。 对于经过Sen2Cor处理好的数据,需经过重采样才可进行计算。重采样工具在Raster->Geometric->Resampling。 如果选择Biopyhsical Processor S2_10m进行计算,需要将所有的波段都重采样为10米(哨兵二号的第二波段为10米,可据此波

gxwwww的博客 9418

对象的克隆——原型模式(四)

7.5 原型管理器的引入和实现       原型管理器(Prototype Manager)是将多个原型对象存储在一个集合中供客户端使用,它是一个专门负责克隆对象的工厂,其中定义了一个集合用于存储原型对象,如果需要某个原型对象的一个克隆,可以通过复制集合中对应的原型对象来获得。在原型管理器中针对抽象原型类进行编程,以便扩展。其结构如图7-8所示:

刘伟技术博客 2万+

Windows 10下Carla 0.9.15安装避坑指南:从下载到运行的全流程解析

本文详细解析了在Windows 10系统上安装和运行Carla 0.9.15自动驾驶仿真平台的全流程。内容涵盖从系统环境准备、资源下载、Python依赖安装,到首次启动验证及常见错误(如DLL缺失、显卡驱动问题)的深度解决方案,旨在帮助用户快速搭建稳定的开发环境,并运行第一个自动驾驶Python脚本。

alice7model的博客 547

单例模式 和 原型模式

原型模式 http://www.cnblogs.com/itTeacher/archive/2012/12/02/2797857.html 单例模式 http://blog.youkuaiyun.com/jason0539/article/details/23297037/ 以上引自互联网, 仅自己使用,如有侵权,请提醒。谢谢!

zkLvoeShf1的博客 1091

Allegro PCB设计实战:5分钟搞定DDR信号线的Match Group等长规则设置

本文详细介绍了在Allegro PCB设计中,如何快速为DDR信号线设置Match Group等长规则。通过实战演练,解析了从理解相对传输延迟原理、在规则管理器中创建Match Group,到设置合理容差和利用动态绕线指示的全流程,帮助工程师在5分钟内高效完成高速信号时序约束,提升设计可靠性与效率。

gg901的博客 1055

使用蒙特卡洛模拟方法在MATLAB中估算居里温度: 一个详细而通俗的指南

居里温度是磁性材料失去磁性的温度。但是,计算机模拟为我们提供了一个在理论和实验之间的桥梁,使我们能够在不进行实际测量的情况下估计这一重要参数。在下一部分,我们将详细介绍蒙特卡洛迭代的核心代码,以及如何使用它来模拟磁性材料中原子的行为。在估算居里温度的上下文中,我们将使用蒙特卡洛方法来模拟磁性材料中的原子或分子的行为。通过使用蒙特卡洛方法,我们可以在MATLAB中估算居里温度,从而为理论研究和实验设计提供有价值的信息。:我们使用的是一个有限的尺寸的网格模型,这可能导致一些大小效应,特别是在接近居里温度时。

qq_38334677的博客 979

单例模式,原型模式

内容定位 听说过单列模式,但不知道如何应用的人群 单列模式是非常经典的高频面试题,希望通过面试单列彰显技术深度,顺利拿到Offer的人群。 听说过原型模式,但不知道如何应用的人群 单列模式(Singleton Pattern)是指确保一个在任何情况下都绝对只有一个实列,并提供一个全局访问点。 隐藏其所有的构造方法。 属于创建型模式。 确保任何情况下都绝对只有一个实列。 S...

qq_34665775的博客 226

推荐一个直接用于项目开发的PID库!很好用,很稳定

关注、星标公众号,不错过精彩内容大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 9028

单例bean与原型bean的区别,以及Spring中的bean为何默认是单例模式

在使用Spring开发时,Spring提供了五种scope,分别为singleton,prototype,request,session,globalsession。 上图为各个scope描述的官方文档截图。Spring在一开始的时候只提供了singleton和prototype两种beanscope. 单例Bean和原型Bean的区别(Singleton VS Prototyp...

Alex 2085

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如何深度掌握small-spring的Bean作用域管理:单例与原型模式的终极指南

🌱 **small-spring** 作为Spring框架的简化实现,其Bean作用域管理机制是理解Spring核心原理的关键。本文将带你深度探索单例模式和原型模式在small-spring中的实践应用,帮助开发者从源码层面掌握Bean生命周期管理的精髓。 ## 🔍 Bean作用域的核心概念 在small-spring框架中,**Bean作用域** 定义了Bean实例在Spring容器中的

gitblog_00193的博客 498

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IoC与DI工厂、单例、原型模式详解

1.简单工厂模式与工厂方法模式的理解与应用 2.饿汉式与懒汉式单例模式的理解与应用

weixin_52450996的博客 689

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【设计模式】原型模式 ( 浅拷贝 | 深拷贝 | 原型与单例冲突 | 禁用 final )

I . 原型模式 总结 II . 原型模式 浅拷贝 III . 原型模式 深拷贝 IV . 原型模式 与 单例 V . 原型模式 中的 final 关键字 ( 禁止出现 )

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1169

springboot中单例 / 原型模式与线程安全

springboot中单例 / 原型模式与线程安全

Memory_2020的博客 3074

设计模式之单例和原型

今天这篇文章我们来学习创建型设计模式的另外两个孪生兄弟,单例和原型,其中原型设计模式中我们深入到JVM的内存模型,最后顺便谈谈Java中的值传递和引用传递。

程序员田同学的博客 301

设计模式-创建型05-原型与单例

一,原型模式 定义:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 应用:Java中实现cloneable接口,C++中的深拷贝与浅拷贝。 二,单例模式 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 应用:Windows任务管理器。 通过私有构造函数与 赋值运算符即可。 一个简陋的封转。 #include usi

xutengaaa的专栏 455

设计模式组合拳:单例×原型×适配器×委托——旧系统对接与第三方集成的终极实战指南

委托调用(Delegation)是面向对象设计中最基础也最强大的协作机制。它的核心思想极其简单:📌我不自己做这件事,我找别人帮我做。在继承体系中,子类通过“我是什么”(is-a)来获得能力;而在委托体系中,对象通过“我认识谁”(has-a)来获得能力。// ❌ 继承:AlipayAdapter IS-A AlipayClient → 暴露了所有SDK内部方法// ✅ 委托:AlipayAdapter HAS-A AlipayClient → 只暴露统一接口// ★ 委托对象@Override。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 277

关于 设计模式的单例与 spring配置applicationContext文件单例 一点阐述

在applicationContext.xml中,对于没有状态的java类,应该将其配置成singleton单例,spring默认配置就是单例,  对于有状态的应该配置成prototype类型  spring配置文件中的单例跟设计模式中单例含义不一样:   设计模式中单例指:在JVM启动过程中,对于某一个类,如果类是单例,它只会生成唯一的实例   spring 配置中单例指:对于每一个IOC容器,它只会生成唯一的实例,如果在JVM启动时有两个IOC容器,   每个容器都会生成这个类的唯一实例,显然在JVM启

daozhongyang的专栏 2788

04设计模式-创建者模式(单例、工厂、原型、建造者模式)

需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。

qq_56947957的博客 1385

spring单例的bean是单例还是原型

转载请注明出处: 有一次老大突然问spring管理的bean是单例还是多例,当时印象中还停留在struts2的线程安全,想都没想就回答了是原型后来发现是错的。 先说说单例原型的区别和多线程中的影响 单例:不管是懒汉模式还是饿汉模式,始终只有一个实例 原型:每次使用时都是一个新的实例 在多线程中的安全性 如果bean中有成员变量,且这个成员变量可以被修改,那么在多线程中,单例是不安全的; 但是如果这...

qq_27218667的博客 1772

【设计模式学习02】创建者模式之单例、工厂、原型、建造者模式

需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。......

一个正在努力学习的iter 1009

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】

设计模式是指在软件开发中为解决常见问题而总结出的一套可复用的解决方案。这些模式是经过长期实践证明有效的编程经验总结,并可以在不同的项目中复用。设计模式并不是代码片段,而是对常见问题的抽象解决方案,它提供了代码结构和模块间交互的一种设计思路,帮助开发者解决特定的设计问题。设计模式的特点:通用性:设计模式针对的是软件开发中常见的设计问题,适用于各种软件工程项目。可复用性:设计模式可以在不同项目和环境下被重复使用,提高代码的可维护性和扩展性。可扩展性:设计模式有助于让代码结构更加灵活,易于扩展和修改。

仙魁XAN 3114
上一篇: ext 的事件处理
下一篇: プラットホーム
developer2016
博客等级 码龄10年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值