-
单例设计模式
-
静态方法和属性的经典使用
-
设计模式是:在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决方法
什么是单例模式
-
单个实例的设计模式
-
所谓类的单例设计模式,就是采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象的实例,并且该类只提供一个取得其对象实例的方法
单例模式的分类:
-
饿汉式
-
懒汉式
饿汉式与懒汉式的区别
-
二者最大的区别是:创建时机不同:饿汉式在类加载的时候就创建了对象实例。而懒汉式是在使用时才存在
-
饿汉式不存在线程安全问题,懒汉式存在线程安全问题-----(当多个线程同时进入判断时)
-
饿汉式存在浪费资源的可能,因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了。懒汉式是使用时才创建,就不存在这个问题
-
javaSE标准类中,java.lang.Runtime就是经典的单例模式
步骤实现:
-
构造器私有化
-
类的内部创建对象
-
向外暴露一个静态的公共方法。getInstance
代码实现:
/**
* 饿汉式
* 1. 构造器私有化-----防止在类的外部直接创建
* 2. 在类的内部创建对象(该对象是静态的)
* 3. 向外暴露一个静态的公共方法。getInstance
* 他为什么是饿汉式
* 因为:
* 当调用类的静态变量时,会导致类被加载,静态的对象会被执行。静态对象一执行,那么这个对象就会存在了
*/
public class SingleTon01 {
public static void main(String[] args) {
Cat instance = Cat.getInstance();
System.out.println(instance);
Cat instance1 = Cat.getInstance();
System.out.println(instance1);
//instance对象与instance1同一个对象
System.out.println(instance==instance1);//true
}
}
class Cat{
private String name;
public static int n1 = 100;
//为了在静态方法中,返回其对象,需要将其修饰为静态方法
//对象,通常为重量级的对象,饿汉式可以会造成创建了对象,但没有使用,会造成资源的浪费
private static Cat cat = new Cat("小红");
private Cat(String name) {
this.name = name;
}
public static Cat getInstance(){
return cat;
}
懒汉式
步骤:
-
1.构造器私有化
-
2.定义一个私有的静态属性对象
-
3.提供一个public 的static方法---中间加判断
代码实现:
/**
* 懒汉式
*
* 当类被调用是,不会创建对象,需要自己调用,后面再次调用,会返回上次创建的对象,从而保证了单例
*/
public class SingleTon02 {
public static void main(String[] args) {
Dog instance = Dog.getInstance();
System.out.println(instance);
//第二次调用的时候,会得到上次创建的对象
Dog instance1 = Dog.getInstance();
System.out.println(instance1);
System.out.println(instance==instance1);//true
}
}
class Dog{
private String name;
private static Dog dog;
private Dog(String name) {
this.name = name;
}
public static Dog getInstance(){
if(dog == null){
dog = new Dog("大黄");
}
return dog;
}
出处:https://www.cnblogs.com/csc0712/p/15257001.html
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比