package com.uncle.singleton;
/**
*设计模式 23种
* 1.设计模式不是知识点
* 2.设计模式是一种设计经验的总结
* 3.设计模式用来解决某些场景下的某一类问题的---->通用的解决方案
* 4.有了设计模式之后 可以让代码更容易被理解 确保了复用性 可靠性 可扩展性
*
* 设计模式分为三类
* 1.创建型模式(5种)----->用于解决对象创建的过程
* 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式
* 2.结构型模式(7种)----->把类或对象通过某种形式结合在一起 构成某种复杂或合理的结构
* 适配器模式 装饰者模式 代理模式 外观模式 桥接模式 组合模式 享元模式
* 3.行为型模式(11种)---->用来解决类或对象之间的交互 更合理的优化类或对象之间的关系
* 观察者模式 策略模式 模板模式 责任链模式 解析器模式 迭代子模式
* 命令模式 状态模式 备忘录模式 访问者模式 中介者模式
*
*
*
* 单例模式
*
* 单例模式的实现
* 1.私有的构造方法
* 2.私有的静态的当前类对象作为属性
* 3.公有的静态的方法返回当前类对象
*
* 指的是对象的加载
* 饿汉式(立即加载) 对象启动时就加载啦
* 不会产生对象没有就拿来使用的问题 空指针异常
* 启动项目加载的对象过多 有些还没有使用 产生服务器承载压力的问题
* 懒汉式(延迟加载) 对象什么时候用到了 才会加载
* 可能会由于没有操作好 导致异常(很严谨)
* 启动项目时候只有需要的加载 不需要的还没有创建 不会浪费空间
* *生命周期托管(单例对象别人帮我们处理) 对象加载过程交给别人
*/
public class SingleTon {
//通过我的设计 让这个类只能创建一个对象
//每一个类都有默认无参数的构造方法----公有 在外面可以随意创建
//1.让构造方法变成私有---保证外面不可以随便创建对象
private SingleTon(){}
//2.单例 不是无例 --- 在本类中的某个成员位置上创建唯一的一个对象
//在以下的四个位置 写一行new SingleTon
//属性
//方法------不行 每一次执行都会产生一个过程 保证不了唯一
//构造方法--不行 私有 本身就是这个构建过程
//块--------不行 没有返回值 创建了对象也无法给别人使用
//2.在当前类中存在一个私有的静态属性 是当前类类型的
private static SingleTon single;//直接 = new Singleton(); 立即加载 饿汉式
//3.提供一个获取单个对象的方法给用户
// 返回值 将对象返回出去
public static SingleTon getSingleTon(){// get类名 newInstance
if(single == null) {
single = new SingleTon();//延迟加载的方式 懒汉式
}
return single;//引用类型
}
}
package com.uncle.singleton;
public class TestMain {
public static void main(String[] args){
SingleTon s1 = SingleTon.getSingleTon();
SingleTon s2 = SingleTon.getSingleTon();
System.out.println(s1==s2);//true 比较地址
System.out.println(s1.equals(s2));//true Object类继承过来的 默认也比地址
System.out.println(s1);//类全名@hashCode--->16进制的整数
System.out.println(s2);
}
}
- 单例模式简图
- 栈内存溢出问题