单例模式

Java_单例模式

廉价感情. 提交于 2019-12-22 20:39:13
虽然不知道单例模式有什么用,但既然很有用还是先写写记住吧! 单例模式顾名思义只由一个实例,就是new的只能是一个,你可以new很多个,但他的地址是一样的,也就是一个…这么绕口以后再看也看不懂了。 单例模式分为两种:饿汉式模式与懒汉式模式! 饿汉式:因为它很饿所以很着急,不管其他有没有new,他就先new出来,因为是提前new出来,所以不管其他new不new,但是他就一直占用内存,很浪费啊。 懒汉式:它很懒很懒,只由别人调用它时,它才不情不愿的把对象给你。所以他就一点不浪费了! // 下边是饿汉模式代码块 class SingleTon { // ②方法都是静态的,属性肯定也得是啊 final static SingleTon instance = new SingleTon ( ) ; // 把无参构造私有化,断绝了他们的念头 private SingleTon ( ) { } // 造个方法 给他们调用 // ①得是静态的啊,不然main... public static SingleTon getInstance ( ) { return instance ; } } // 懒汉式 class LazySingleTon { static LazySingleTon instance = null ; private LazySingleTon ( ) { } public

C++设计模式5--单例模式Singleton--当前对象只有一个实例 .

你离开我真会死。 提交于 2019-12-22 07:08:41
很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreate运行过程中,不论单击多少次,弹出的总是同一个对话框,这里的关于对话框就是一个单例模式实现的对象。 再比如说我们经常用的Windows下的任务管理器,无论打开多少次,同时同一个任务管理器对话框。 单例模式概述 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为protected或private;最后,需要提供要给全局访问点,就需要在类中定义一个static函数,返回在类内部唯一构造的实例。 实现要点 单例模式的要点有三个; ①是某个类只能有一个实例; ②是它必须自行创建这个实例;

工厂模式+单例模式

大城市里の小女人 提交于 2019-12-22 00:45:46
工厂的三种模式:目的都是解耦 简单工厂 工厂是一个类:生产各种各样产品;不同类实现接口;业务全部在fractory中,违反了开闭原则。 使用在业务简单的情况下。 工厂方法 (如果工厂的产品全部属于同一个等级结构,则属于工厂方法。) 定义一个创建对象的工厂接口,让子类决定实例化哪一个类,将实际工作交给子类 例子: 工厂是一个接口,produceTrunk() ,实现创建不同卡车类 卡车也是一个接口,实现不同卡车类 将不同卡车的业务逻辑抽离出fractory 优点 符合开闭原则,每增加一种产品,只需要增加相应具体的产品类和工厂子类。 符合单一职责原则,每个具体工厂类只负责创建对应的产品。 缺点 在增加一个新产品时,需要增加一个产品类和一个具体的子工厂,每个工厂生产一种产品,太过单一。 抽象工厂 (如果工厂的产品来自多个等级结构,则属于抽象工厂模式) 抽象工厂角色:具体工厂必须时间的接口。 具体工厂角色:和具体业务逻辑相关的代码,创建对应的具体产品的对象。 抽象工厂:producetrunk(); producesedan(); 具体工厂:宝马工厂(宝马轿车、宝马卡车)奥迪工厂(奥迪轿车、奥迪卡车) 抽象产品:卡车、轿车 具体产品:宝马卡车,宝马轿车,奥迪卡车,奥迪轿车 单例模式 概念:包含一个被称为单例的特殊类。 特点:单例类只能有一个实例;单例类必须自己创建自己的唯一实例

设计模式-单例模式

百般思念 提交于 2019-12-21 17:23:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 单例模式有两种写法: 1: 饿汉模式 优点:饿汉模式天生是线程安全的,使用时没有延迟 缺点:启动时即创建实例,启动慢,有可能造成资源浪费 @Slf4j public class HungrySingle { private static HungrySingle hungrySingle = new HungrySingle(); public static HungrySingle getHungrySingle(){ log.info("HungrySingle::getHungrySingle::time:{}",(new Date()).getTime()); return hungrySingle; } } 2: 懒汉模式 优点:懒加载启动快,资源占用小,使用时才实例化,无锁 缺点:非线程安全 @Slf4j public class LazySingle { private static LazySingle lazySingle = null; public LazySingle() { } public static LazySingle getLazySingle(){ if(lazySingle == null){ lazySingle = new LazySingle(); } return

Java单例模式--------懒汉式和饿汉式

依然范特西╮ 提交于 2019-12-21 14:58:22
本文转载自: https://www.cnblogs.com/nolonely/p/5927957.html 作者:nolonely 转载请注明该声明。 单件模式用途: 单件模式属于工厂模式的特例,只是它不需要输入参数并且始终返回同一对象的引用。 单件模式能够保证某一类型对象在系统中的唯一性,即某类在系统中只有一个实例。它的用途十分广泛,打个比方,我们开发了一个简单的留言板,用户的每一次留言都要将留言信息写入到数据库中,最直观的方法是没次写入都建立一个数据库的链接。这是个简单的方法,在不考虑并发的时候这也是个不错的选择。但实际上,一个网站是并发的,并且有可能是存在大量并发操作的。如果我们对每次写入都创建一个数据库连接,那么很容易的系统会出现瓶颈,系统的精力将会很多的放在维护链接上而非直接查询操作上。这显然是不可取的。 如果我们能够保证系统中自始至终只有唯一一个数据库连接对象,显然我们会节省很多内存开销和cpu利用率。这就是单件模式的用途。当然单件模式不仅仅只用于这样的情况。在《设计模式:可复用面向对象软件的基础》一书中对单件模式的适用性有如下描述: 1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 下面对单件模式的懒汉式与饿汉式进行简单介绍: 1、饿汉式:在 程序启动

【java】深度解析单例模式

老子叫甜甜 提交于 2019-12-21 06:53:03
前言 关于单例模式,请看菜鸟教程中的定义: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 代码实现 饿汉模式 package com.dl.hungry_singleton; public class HungrySingleton { // 在类加载的时候,单例对象就已经被创建 private static final HungrySingleton instance = new HungrySingleton(); // 构造方法私有化 private HungrySingleton() { } // 提供一个全局的访问点 public static HungrySingleton newInstance() { return instance; } } 下面这种实现方法,与上面的代码本质上没有差别。 package com.dl.hungry_singleton; public class

单例模式有几种写法?

六眼飞鱼酱① 提交于 2019-12-21 05:06:12
单例模式有几种写法? 前言 纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和coding style的同时,还很容易扩展到其他问题。 这里讲解几种笔者常用的写法,但切忌生搬硬套,去记“茴香豆的写法”。编程最大的乐趣在于“know everything, control everything”。 JDK版本:oracle java 1.8 大体可分为4类,下面分别介绍他们的基本形式、变种及特点。 饱汉模式 饱汉是变种最多的单例模式。 基础的饱汉 饱汉,即已经吃饱,不着急再吃,饿的时候再吃。所以他就先不初始化单例,等第一次使用的时候再初始化,即“懒加载”。 // 饱汉 // UnThreadSafe public class Singleton1 { private static Singleton1 singleton = null; private Singleton1() { } public static Singleton1 getInstance() { if (singleton == null) { singleton = new Singleton1(); } return singleton; } } 饱汉模式的核心就是懒加载。好处是更启动速度快、节省资源,一直到实例被第一次访问,才需要初始化单例;小坏处是写起来麻烦

单例模式

不想你离开。 提交于 2019-12-20 15:29:28
单例模式(singleton ) 的意思就是只有一个实例。 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 一些 资源管理器 常常设计成单例模式。 在 计算机系统 中,需要管理的资源包括 软件 外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。 cocos2d充分使用了单例设计模式,这里有必要提及它是因为它是经常是讨论热点。大体上说,一个singleton是一个类,它在应用使用期中仅仅实例化一次。为了确保如此,就要使用一个既创建又访问此对象实例的静态方法。因此,你不使用alloc/init或者静态自动释放初始化器(static autorelease initializer),而是使用以shared开通的方法来访问一个单例对象。这里有一些cocos2d最常用的单例方法,并告诉你怎么访问:   CCActionManager*

【设计模式】单例模式

≯℡__Kan透↙ 提交于 2019-12-20 08:51:18
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 介绍 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 应用实例: 1、一个党只能有一个主席。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 没有接口

JAVA设计模式之单例模式

吃可爱长大的小学妹 提交于 2019-12-19 16:17:18
文章目录 1 懒汉式单例 1.1 在getInstance方法上加同步 1.2 双重检查锁定 1.3 静态内部类 2 饿汉式单例 3 登记式单例(可忽略) 4 饿汉式和懒汉式区别 从名字上来说,饿汉和懒汉: 另外从以下两点再区分以下这两种方式: 懒汉式中的1.1,1.2,1.3实现有什么区别: 什么是线程安全? 5 应用 转自: https://blog.csdn.net/jason0539/article/details/23297037/ 概念 :java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种: 懒汉式单例 、 饿汉式单例 、 登记式单例 。 单例模式有以下特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之, 选择单例模式就是为了避免不一致状态,避免政出多头。 1 懒汉式单例