单例模式

DesignPattern系列__10单例模式

浪尽此生 提交于 2019-11-26 04:26:37
单例模式介绍 单例模式,是为了确保在整个软件体统中,某个类对象只有一个实例,并且该类通常会提供一个对外获取该实例的public方法(静态方法)。 比如日志、数据库连接池等对象,通常需要且只需要一个实例对象,这就会使用单例模式。 单例模式的八种模式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(同步方法) 懒汉式(同步代码块) 懒汉式(双重检查) 静态内部类 枚举 下面依次来说明一下: 饿汉式(静态常量) 通常,我们创建一个对象的方式就是new,但是,当我们考虑只创建一个实例的时候,就应该禁止外部来通过new的方式进行创建。同时,由于无法使用new,你应该考虑提供一个获取单例对象的方式给别人。 思路 1.将构造器私有化(防止外部new,但是对反射还是有局限) 2.类的内部创建对象 3.对外提供一个获取实例静态的public方法 代码实现如下: public class Singleton1 { public static void main(String[] args) { HungrySingleton hungrySingleton = HungrySingleton.getInstance(); HungrySingleton hungrySingleton1 = HungrySingleton.getInstance(); System.out

Java连载53-单例模式初步、final关键字补充、回顾知识点

霸气de小男生 提交于 2019-11-26 01:04:52
一、回顾 1.类和对象的区别 2.UML(uniform makeup language) 3.方法区存储静态变量、常量(static final修饰) 4.堆内存中存储对象 5.栈存储变量 6.this()可用于构造方法第一行 7.static静态语句块(JVM中第一次使用类的时候,会进行加载静态语句块),还可以修饰变量和方法 8.设计模式是可以重复利用的解决方案可以分为四类 9.类的继承(单继承) 10.方法覆盖(相同修饰符,相同方法名,相同参数) 11.多态,子类->父类(向上转型 父类->子类(向下转换,强制类型转换) 12.super关键字,子类里面访问父类的方法 13.super()可以出现在构造方法第一行,默认自动生成,不会创建父类,只是用来初始化,用来调用父类的构造方法。 14.final关键字 15.abstract抽象类 非抽象类调用抽象类,必须将抽象类中的方法覆盖、重写 二、深入final关键字 1.抽象类不可以被final关键字修饰(抽象类定义出来就是用来继承的) 2.fianl修饰的引用类型,该引用不可以再重新指向其他的java对象 但是final修饰的引用,该引用指向的对象的属性是可以修改的。 package com.bjpowernode.java_learning; ​ public class D53_1_FinalKeywordAddition

java版单例模式

别等时光非礼了梦想. 提交于 2019-11-25 20:48:41
单例模式可以说是最常用的设计模式之一,其主要作用就是保证一个类只有一个实例,并且提供一个访问它的全局访问点,严格的控制用户的访问方式。 单例模式又分为懒汉模式和饿汉模式,首先说一下饿汉模式: 饿汉模式 饿汉模式有点饥不择食的意思,就像一个人饿了很久,所以只要有人给东西他就吃而不考虑东西好不好吃,自己能不能吃得了。代码如下: 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 =

单例模式

我只是一个虾纸丫 提交于 2019-11-25 19:32:14
单例模式 1. 饿汉式-线程安全 public class Singleton { private static Singleton uniqueInstance = new Singleton ( ) ; //私有静态变量 private Singleton ( ) { //私有构造方法 } public static Singleton getUniqueInstance ( ) { //公有静态函数 return uniqueInstance ; } } 优点: 采取直接实例化 uniqueInstance 的方式,所以不会产生线程不安全的问题。 缺点: 直接实例化的方式丢失了延迟实例化带来的节约资源的好处。 场景: JDK中 java.lang.Runtime; 里使用了饿汉式。 2. 懒汉式-线程不安全 public class Singleton { private static Singleton uniqueInstance ; //私有静态变量 private Singleton ( ) { //私有构造方法 } public static Singleton getUniqueInstance ( ) { //公有静态函数 if ( uniqueInstance == null ) { uniqueInstance = new Singleton ( ) ; }