JAVA设计模式单例
来源:互联网 发布:win10优化知乎 编辑:程序博客网 时间:2024/05/16 04:42
以前就知道单例模式就是只能实例化一个类。没想到中间还这么多说道
从基础说起,第一种就叫做静态创建实例 就是除了将构造函数变为私有的外,有一个内部new 一个实例,static的 然后通过getInstance 返回实例
然后这种方式的缺点在于,如果单例还有其他静态函数,一旦调用的话,就可以创建单例。 封闭性不好
来个封闭性好的, 改一下 内部new一个实例为空, 在getInstance 返回的过程中,判断是否为null ,如果为null 就new 一个Instance 返回。
但是这样多线程并发就要添加同步锁。造成时间开销
再改进一下 利用静态内部类可以访问外部类的私有方法。 在getInstance 的时候 返回静态内部类的外部类实例。当单例类被加载时,其内部类不会被加载,也就不会创建单例对象
但这种也不太好,有一种方法也可以突破限制,比如通过反射改变构造函数的私有性,就可以创建多个单例。
所以据说最好的方法是利用枚举来做单例,复制代码过来吧。
enum Singleton {
RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);
// 构造枚举值
Singleton(int rv, int gv, int bv) {
this.redValue = rv;
this.greenValue = gv;
this.blueValue = bv;
}
// 自定义数据域,private为了封装。
private int redValue;
private int greenValue;
private int blueValue;
public int getRedValue() {
return redValue;
}
public void setRedValue(int redValue) {
this.redValue = redValue;
}
public int getGreenValue() {
return greenValue;
}
public void setGreenValue(int greenValue) {
this.greenValue = greenValue;
}
public int getBlueValue() {
return blueValue;
}
public void setBlueValue(int blueValue) {
this.blueValue = blueValue;
}
}
public class Demo {
public static void main(String[] args) {
System.out.println(Singleton.RED.getRedValue());
}
}
- java 设计模式,单例设计模式
- java设计模式-单例设计模式
- java设计模式-单例设计模式
- Java设计模式 单例设计模式
- Java设计模式------单例设计模式
- java设计模式----->单例设计模式
- java设计模式:单例设计模式
- java设计模式-----单例设计模式
- Java设计模式----单例设计模式
- java设计模式-单例设计模式
- java设计模式:单例设计模式
- java 设计模式-单例设计模式
- Java设计模式--单例设计模式
- java设计模式---单例设计模式
- Java设计模式-单例设计模式
- JAVA设计模式:单例设计模式
- java-单例设计模式
- Java设计|单例模式
- Spark 性能相关参数配置详解
- C语言变量的存储类别
- Android 编程下通过 Theme 和 Style 避免 APP 启动闪黑屏
- android 端口号冲突
- 0111 《软件架构设计》读书笔记【基础】
- JAVA设计模式单例
- Mybatis--Mapper文件中使用静态方法
- 欢迎使用CSDN-markdown编辑器
- codeforces 54C First Digit Law (数位dp+概率dp+背包模型)
- linux下nohup启动jar包
- GitHub优秀的Android开源项目
- 安装本地库
- Fedora 命令
- 压力测试工具