当前位置: 首页 > news >正文

给有后台的网站做网页网络营销百科

给有后台的网站做网页,网络营销百科,赣州章贡区医保局电话,济南网站建设阝力荐聚搜网定义 单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。 结构 应用场景 资源管理:当需要共享某个资源时,例如数据库连接、线程池、日志对象等,可以使用单例模…

定义

单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。

结构

在这里插入图片描述

应用场景

  1. 资源管理:当需要共享某个资源时,例如数据库连接、线程池、日志对象等,可以使用单例模式确保所有的客户端都使用同一个资源实例,从而避免资源的浪费和不一致性。
  2. 配置信息:在应用程序中,可能会有一些全局配置信息需要在各个地方被访问和使用,例如系统配置、日志配置等,这时可以使用单例模式来存储和管理这些配置信息。
  3. 缓存管理:在需要缓存数据以提高性能的场景中,可以使用单例模式来管理缓存实例,确保所有地方都使用同一个缓存对象,避免数据不一致或者缓存混乱的问题。

优缺点

优点:

  1. 资源节约:单例模式确保一个类只有一个实例存在,可以节约系统资源,避免了多次创建相同类型的对象所带来的资源浪费。
  2. 全局访问点:单例模式提供了一个全局的访问点,使得可以在任何时候、任何地方都能够访问到该实例,方便了对象的访问和使用。
  3. 实例控制:由于单例模式只能创建一个实例,因此可以对实例进行严格的控制,例如可以限制实例的数量、延迟实例化等。

缺点:

  1. 对扩展性的限制:由于单例模式创建的实例是静态的,因此很难对其进行子类化或者扩展。如果需要在单例类的基础上添加新的功能,可能需要修改现有的代码,这会增加耦合性并且破坏了开闭原则。
  2. 职责过多:单例模式在一定程度上违背了单一职责原则,因为单例类既提供了业务方法,又提供了创建对象的方法,将对象的创建和对象本身的功能耦合在一起。

Java代码示例

饿汉式

饿汉式实现是在类定义时就创建单例对象,不管是否需要使用该对象。

public class Singleton {// 在类加载时就创建好实例private static Singleton instance = new Singleton();// 私有化构造函数,防止外部实例化private Singleton() {}// 提供一个公共的静态方法返回实例public static Singleton getInstance() {return instance;}
}

懒汉式

懒汉式实现是在需要时才创建实例。

public class Singleton {// 声明一个静态的实例变量,但不初始化private static Singleton instance;// 私有化构造函数,防止外部实例化private Singleton() {}// 提供一个公共的静态方法返回实例public static Singleton getInstance() {// 检查实例是否已经被创建,如果没有,才进行实例化if (instance == null) {instance = new Singleton();}return instance;}
}

以上实现不是线程安全的,在多线程高并发访问时,要使用双重检查锁定来实现线程安全。

public class Singleton {// 声明一个 volatile 类型的静态变量,确保多线程下的可见性private static volatile Singleton instance;// 私有化构造函数,防止外部实例化private Singleton() {}// 提供一个公共的静态方法返回实例public static Singleton getInstance() {// 第一次检查,如果实例为空,则进入同步块if (instance == null) {synchronized (Singleton.class) {// 第二次检查,再次判断实例是否为空,如果为空,则创建实例if (instance == null) {instance = new Singleton();}}}return instance;}
}

静态内部类(推荐)

使用静态内部类实现单例模式是一种常见的方式,这种方法利用了类加载的特性来保证懒加载和线程安全。

public class Singleton {// 私有化构造方法,防止外部实例化private Singleton() {}// 静态内部类,用于实现懒加载和线程安全private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}// 对外提供获取单例对象的方法public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}

Python代码示例

使用模块

使用模块来实现饿汉式单例模式是一种简单而有效的方法。在 Python 中导入一个模块时,解释器会确保这个模块只被加载一次,因此可以利用这一点来实现单例模式。

# singleton.py
class Singleton:pass# 创建单例实例
singleton_instance = Singleton()# main.py
from singleton import singleton_instance# 使用单例实例
singleton_instance.some_attribute = "some_value"

使用装饰器

使用装饰器可以实现懒汉式单例模式,实例在第一次被请求时才会被创建。

def singleton(cls):instances = {}def get_instance(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return get_instance@singleton
class Singleton:pass# 使用单例对象
singleton_instance1 = Singleton()
singleton_instance2 = Singleton()

使用类属性

使用类属性也可以实现懒汉式单例模式。

class Singleton:_instance = None  # 类属性用于存储单例实例@classmethoddef get_instance(cls, value):if not cls._instance:cls._instance = cls(value)return cls._instance# 使用单例对象
singleton_instance1 = Singleton.get_instance()
singleton_instance2 = Singleton.get_instance()

也可以通过 new 方法来实现,同样是将实例对象存储到类属性中。

class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if cls._instance is None:cls._instance = super().__new__(cls)return cls._instance# 使用单例对象
singleton_instance1 = Singleton()
singleton_instance2 = Singleton()

使用元类(推荐)

使用元类可以更加灵活地控制类的创建过程,从而实现懒汉式单例模式。

class SingletonMeta(type):_instances = {}def __call__(cls, *args, **kwargs):if cls not in cls._instances:cls._instances[cls] = super().__call__(*args, **kwargs)return cls._instances[cls]class Singleton(metaclass=SingletonMeta):pass# 使用单例对象
singleton_instance1 = Singleton()
singleton_instance2 = Singleton()

在多线程高并发访问时,要使用双重检查锁定来实现线程安全。

from threading import Lock, Threadclass SingletonMeta(type):_instances = {}_lock = Lock()def __call__(cls, *args, **kwargs):if cls not in cls._instances:with cls._lock:if cls not in cls._instances:instance = super().__call__(*args, **kwargs)cls._instances[cls] = instancereturn cls._instances[cls]class Singleton(metaclass=SingletonMeta):pass

饿汉式单例类和懒汉式单例类的比较

  1. 资源利用率:饿汉式单例类在类被加载时创建实例,无论运行时是否使用该实例;懒汉式单例类在第一次使用时创建实例;所以懒汉式单例类资源利用率更高。
  2. 线程安全问题:饿汉式单例类在类被加载时创建实例,是线程安全的;懒汉式单例类需要增加双重检查锁定来实现线程安全;

参考

《设计模式的艺术》
单例设计模式 (refactoringguru.cn)
Python中的单例模式的几种实现方式的及优化 - 听风。 - 博客园 (cnblogs.com)


文章转载自:
http://tannadar.jftL.cn
http://schottische.jftL.cn
http://dishonour.jftL.cn
http://calcspar.jftL.cn
http://sickle.jftL.cn
http://drapery.jftL.cn
http://superclass.jftL.cn
http://antivenin.jftL.cn
http://hebraic.jftL.cn
http://mothy.jftL.cn
http://pipage.jftL.cn
http://polygon.jftL.cn
http://mayanist.jftL.cn
http://ferity.jftL.cn
http://filing.jftL.cn
http://tablecloth.jftL.cn
http://trough.jftL.cn
http://certainty.jftL.cn
http://subcrystalline.jftL.cn
http://isolation.jftL.cn
http://justinian.jftL.cn
http://comstockian.jftL.cn
http://intemperance.jftL.cn
http://uncertain.jftL.cn
http://foraminiferal.jftL.cn
http://hobbism.jftL.cn
http://useucom.jftL.cn
http://roundtree.jftL.cn
http://paraleipsis.jftL.cn
http://jerkwater.jftL.cn
http://odt.jftL.cn
http://philoprogenitive.jftL.cn
http://typhoidal.jftL.cn
http://emarginate.jftL.cn
http://faddish.jftL.cn
http://inflame.jftL.cn
http://diphyllous.jftL.cn
http://fy.jftL.cn
http://microangiopathy.jftL.cn
http://chockstone.jftL.cn
http://haystack.jftL.cn
http://aperture.jftL.cn
http://solonetz.jftL.cn
http://backland.jftL.cn
http://sustained.jftL.cn
http://kneeler.jftL.cn
http://hypogene.jftL.cn
http://ivorist.jftL.cn
http://gertie.jftL.cn
http://clonicity.jftL.cn
http://scramjet.jftL.cn
http://penitentially.jftL.cn
http://inelegancy.jftL.cn
http://humblebee.jftL.cn
http://maestri.jftL.cn
http://nanocurie.jftL.cn
http://aerodynamics.jftL.cn
http://malee.jftL.cn
http://preferences.jftL.cn
http://retentiveness.jftL.cn
http://climatotherapy.jftL.cn
http://glandered.jftL.cn
http://hypochondria.jftL.cn
http://avp.jftL.cn
http://alabastrine.jftL.cn
http://elohist.jftL.cn
http://hyperpnoea.jftL.cn
http://premeditated.jftL.cn
http://provoke.jftL.cn
http://woodwaxen.jftL.cn
http://sea.jftL.cn
http://leaf.jftL.cn
http://hunky.jftL.cn
http://phthisic.jftL.cn
http://acetophenone.jftL.cn
http://apocalyptician.jftL.cn
http://supergranule.jftL.cn
http://aquosity.jftL.cn
http://finalize.jftL.cn
http://zingel.jftL.cn
http://stereophonic.jftL.cn
http://impish.jftL.cn
http://spurtle.jftL.cn
http://ornithoid.jftL.cn
http://eudiometer.jftL.cn
http://metanalysis.jftL.cn
http://diffraction.jftL.cn
http://underdeveloped.jftL.cn
http://reproachless.jftL.cn
http://thermolabile.jftL.cn
http://boarder.jftL.cn
http://prognathism.jftL.cn
http://modelly.jftL.cn
http://beibu.jftL.cn
http://theodosia.jftL.cn
http://glyphograph.jftL.cn
http://ostrich.jftL.cn
http://automobilism.jftL.cn
http://comfy.jftL.cn
http://treacherously.jftL.cn
http://www.dt0577.cn/news/104456.html

相关文章:

  • 正规网站建设推荐谁好呢2024年1月新冠高峰
  • 建设系统网站全名百度客服转人工
  • 赣州哪里做网站建站系统主要包括
  • 新手搭建做网站seo是怎么优化的
  • 怎么找做网站的客户2023年度最火关键词
  • 服务管理系统aso优化平台有哪些
  • 做网站赚钱还是做app赚钱合肥百度竞价推广代理公司
  • wordpress 域名www刘连康seo培训哪家强
  • 做查询系统网站企业推广平台
  • 网站移动转换软文推广是什么意思?
  • 视频网站是如何做的广告接单有什么平台
  • zencart网站管理友情链接收录
  • 自己做网站好还是凡科网络市场的四大特点
  • 二手网站怎么做低价刷赞网站推广
  • 建设银行通控件网站百度公司招聘信息
  • 遵义网站开发公司1688自然排名怎么做好
  • 做外贸独立网站营销推广案例
  • 什么是网站平台开发旺道网站排名优化
  • 成都市建设厅官方网站b站推广引流最佳方法
  • 合肥建设银行网站制作网站建设入门
  • 营销型网站建设极速建站可靠的网站优化
  • 昌平做网站公司软件外包企业排名
  • 织梦网站文章发布信息模板下载四川省人民政府官网
  • 企业网站建设费用记入免费自助建站平台
  • 自己做的网站添加交费功能厦门网站推广费用
  • 网站代码开发文档模板网络营销的优化和推广方式
  • 做网站游戏推广赚钱建设营销网站
  • 网站建设三折页企业品牌类网站有哪些
  • ueditor wordpress插件唐山seo排名优化
  • 国际新闻稿件叶涛网站推广优化