单例模式

单例模式

江枫思渺然 提交于 2019-12-04 03:55:22
单例模式:某个类只能有一个实例,提供一个全局的访问点。 单例模式 ●核心作用:保证一个类只有一个实例,并且提供一一个访问该实例的全局访问点。 ●常见应用场景: 一Windows的Task Manager (任务管理器)就是很典型的单例模式 windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 项目中,读取配置文件的类,一般也只有一 个对象。 没有必要每次使用配置文件数据,每次new-个对象去读取。 网站的计数器,一般也是 采用单例模式实现,否则难以同步。 -应用程序的日志应用 , -般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作 , 否则内容不好追加。 数据库连接池的设计-般也是采用单例模式 ,因为数据库连接是一种数据库资源。 -操作系统的文件系统 ,也是大的单例模式实现的具体例子,-个操作系统只能有一个文件系统。 Application也是单例的典型应用( Servlet编程中会涉及到) -在Spring中 ,每个Bean默认就是单例的,这样做的优点是Spring容器可以管理 -在servlet编程中 ,每个Servlet也是单例 -在spring MVC框架/struts1框架中,控制器对象也是单例 ●单例模式的优点: -由于单例模式只生成一 个实例

四:Java设计模式之单例模式

a 夏天 提交于 2019-12-03 23:05:02
一、单例模式 单例模式一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。在spring框架中也是保证了所管理的对象都是单例模式; 二、常用的单例模式 1、饿汉单例 // 它是在类加载的时候就立即初始化,并且创建单例对象 //优点:没有加任何的锁、执行效率比较高, //在用户体验上来说,比懒汉式更好 //缺点:类加载的时候就初始化,不管你用还是不用,我都占着空间 //浪费了内存,有可能占着茅坑不拉屎 //绝对线程安全,在线程还没出现以前就是实例化了,不可能存在访问安全问题 public class HungrySingleton { //私有的构造函数 private HungrySingleton() { } private static final HungrySingleton hungrySingleton = new HungrySingleton(); public static HungrySingleton getInstance() { return hungrySingleton; } }   //静态块写法实现饿汉单例 public class HungryStaticSingleton { private HungryStaticSingleton() { } private static

单例模式

懵懂的女人 提交于 2019-12-03 21:37:13
一、单例模式的定义 单例模式:保证类只有一个实例,并提供一个它的全局访问点。 二、单例模式的三种实现方式。 饿汉式: 饿汉式由于是在类被加载时就创建了实例,不会面临线程安全问题。但是它过早的就占用了系统的资源。     public class Singleton {       private static Singleton singleton =new Singleton();       private singleton(){}       public static Singleton getSingleton(){       return singleton;      }     } 懒汉式:懒汉式是在方法被调用时才会创建实例,实现了延迟加载,节约系统资源。但是在多线程环境下面临着线程安全的问题。需要加同步锁并且进行双重锁定的处理,才能保证线程的安全。 public class Singleton{       private static Singleton singleton =null;       private singleton(){}       public static Singleton getSingleton(){         if(singleton==null){           Syschronized(Singleton

Java设计模式之:单例模式

天大地大妈咪最大 提交于 2019-12-03 21:27:55
单例模式 建议实现方式: 枚举方式实现单例 单例模式的定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要优于静态变量,静态变量在程序启动的时候JVM就会进行加载,如果不使用,会造成大量的资源浪费,单例模式能够实现懒加载,能够在使用实例的时候才去创建实例。开发工具类库中的很多工具类都应用了单例模式,比例线程池、缓存、日志对象等,它们都只需要创建一个对象,如果创建多份实例,可能会带来不可预知的问题,比如资源的浪费、结果处理不一致等问题。 7种实现方式 懒汉模式,线程不安全 懒汉模式,线程安全 饿汉模式 饿汉模式变种 静态内部类模式 枚举类模式 双重检查锁模式 类在加载的时候,就会加载类里面的静态变量(即为静态变量分配内存空间),这样在类被实例化时,就可以直接使用,加快速度。 类在每次实例化时,调用对应的构造方法,完成类成员变量里的非静态变量的初始化,分配相应的内存空间 为什么用枚举类来实现单例模式越来越流行? 参考: https://mp.weixin.qq.com/s/aGMz1u0Oh4ZHTDBFvgq0lg 来源: https://www.cnblogs.com/shengulong/p/11809611.html

单例模式

前提是你 提交于 2019-12-03 17:32:30
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 来源: https://www.cnblogs.com/Yanss/p/11805027.html

单例模式 Singelton

让人想犯罪 __ 提交于 2019-12-03 17:18:59
1.什么是单例模式   保证一个类最多只有一个实例( 实例化控制 ),并且提供一个访问它的全局访问点( 全局访问 )。 2.什么时候用   当创建一个对象比较耗费资源,而这个对象的实例只要有一个就可以使用,这个时候可以用到单例模式。    单例模式解决了,如何实现一个类只能被创建一次的问题。 3.代码示例 using System; namespace mydotnet { class Program { static void Main(string[] args) { Singleton singleton = Singleton.GetInstance();//客户端获取实例 } } public sealed class Singleton { private Singleton(){}//私有化构造函数,防止外部实例化,内部可以使用 private static Singleton instance;//必须是静态的,静态方法才能调用 public static Singleton GetInstance(){//公用静态方法,外部可以调用 if(instance == null) { instance = new Singleton(); } return instance; } } } 4.并发问题解决 上述代码是懒汉模式,第一次使用才会创建。发生并发时

Java——单例模式初步

社会主义新天地 提交于 2019-12-03 16:48:13
1.7 单例模式初步 好书推荐: java 与模式 1.7.1 什么是设计模式 设计模式 是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及 解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。 设计模式是可以重复利用的解决方案,设计模式的提出是在 1995 人,是由 4 为作者提出的,称为 GoF ,也就是“四人组”。共 23 种设计模式。 1.7.2 单例( Singleton )设计模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类 只能存在一个对象实例 ,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为 private ,这样,就不能用 new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。 ① 设计模式从结构上分为三类: 创建型、结构性、行为型。 其中最简单的设计模式就是单例了,单例这种模式,尽量少用,也有将其称为“反模式”,缺点是单例模式的类型无法被继承。 ② 单例模式有什么好处 我们知道对象实例创建完成后

Cocos2d-x设计模式发掘之一:单例模式

萝らか妹 提交于 2019-12-03 15:59:46
本系列文章我将和大家一起来发掘cocos2d-x中所使用到的设计模式,同样的,这些模式在cocos2d-iphone中也可以找到其身影。 声明 :这里发掘模式只是我的个人爱好,通过这个过程,我希望能加深自己对于设计模式运用的理解。关于模式的学习,市面上已经有许多非常好的书籍了。比如《Head First设计模式》、GoF的设计模式,还有《研磨设计模式》等。如果读者对于设计模式完全不了解的话,建议先阅读上面至少一本书籍,了解设计模式之后再阅读本系列文章。这样大家才会有相互交流的共同语言。 为什么要发掘设计模式呢?因为设计模式本身就是人们在一些面向对象的软件系统里面发掘出来的,在一定的场景之下可以重用的解决方案。通过对模式的挖掘,我可以借此机会学习一下这些优秀的设计思想。因为我觉得,一个好的开源游戏框架除了能给我们开发者带来开发效率的提升以外,还应该被我们吸收其设计思想,这样它的价值才能完整。 本系列文章将按照如下思路进行模式挖掘: – 找出某个设计模式的应用场景(类、类结构、对象结构,必要时结合UML类图) – 分析为什么要使用此模式(即设计决策) – 使用此模式的优缺点是什么(任何事务都有两面性,设计模式也不例外) – 此模式的定义及一般实现(这个在GoF的经典书籍里面有,这里借用一下) – 在游戏开发中如何运用此模式(自己对于模式运用场景的理解) – 此模式经常与哪些模式配合使用

设计模式:单例模式

馋奶兔 提交于 2019-12-03 14:44:42
单例模式可以保证一个类只允许存在一个该列的实例,并提供了访问该类对象的唯一方式。 在许多应用场景中,该模式可以保证系统的正确运行。 以下是单例模式的几种实现方式。 方式一:最基础的单例模式 public class ThreadUnsafeSingleton { private static ThreadUnsafeSingleton singleton; //私有化构造函数 禁止外部调用 private ThreadUnsafeSingleton(){ } //通过静态方法获取对象 public static ThreadUnsafeSingleton getSingleton(){ //当两个线程同时进入if判断时,每个线程都能够创建singleton对象 if(singleton == null) singleton = new ThreadUnsafeSingleton(); return singleton; } } 上面的代码中先通过私有化类的构造函数,禁止外部直接调用构造函数创建对象,同时增加了一个私有的静态变量存放单例对象,并提供出一个静态的方法,用于对外提供单例对象的获取方式。 该实现方法无法在多线程环境下正确的运行,假设同时有两条 Thread1 和 Thread2 正在执行 if(signleton == null) 的判断,且此时还没有实例被创建

单例模式

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