转发Java开发三种单例模式
来源:互联网 发布:淘宝买new3ds 编辑:程序博客网 时间:2024/06/04 19:22
单例模式(Singleton pattern)
单例模式(Singleton pattern)是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
单例模式的要点有三个:
1.某个类只能有一个实例。
2.必须自行创建这个实例。
3.必须自行向整个系统提供这个实例。
具体实现角度来说就是以下三点:
1.单例模式的类只提供私有的构造函数 。
2.类定义中含有一个该类的静态私有对象。
3.该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
优点
1.实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
2.灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
缺点
1.开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
2.可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
3.对象生存期
不能解决删除单个对象的问题.
/**
*
* @author mating999
* 懒汉式
* 懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
*/
public class MySingleton {
//含有一个该类的静态私有对象。
private static MySingleton singletonInstance = null;
//提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象
// 懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
public static synchronized MySingleton getSingletonInstance(){
if(singletonInstance == null){
singletonInstance = new MySingleton();
}
return singletonInstance;
}
//私有的构造函数
private MySingleton(){
}
}
/**
*
* @author mating999
* 饿汉式
*/
public class MySingleton1 {
//在自己内部定义自己的一个实例,只供内部调用
private static MySingleton1 singletonInstance1 = new MySingleton1();
////这里提供了一个供外部访问本class的静态方法,可以直接访问
public static MySingleton1 getSingletonInstance(){
return singletonInstance1;
}
private MySingleton1(){
//do something
}
}
/**
*
* @author mating999
* 双重锁的形式
*/
public class MySingleton2 {
private static MySingleton2 singletonInstance2 = null;
private MySingleton2(){
//do something
}
public static MySingleton2 getInstance(){
if(singletonStance2 == null){
//不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了
synchronized(MySingleton2.class){
if(null==singletonInstance2){
singletonInstance2 = new MySingleton2();
}
}
}
return singletonInstance2;
}
}
- 转发Java开发三种单例模式
- JAVA中间转发层开发
- 【Java】【转发】设计模式(Design Patterns)
- 用Darwin开发RTSP级联服务器(拉模式转发)
- Java开发牛人十大必备网站(转发只为收藏)
- Java web开发中,转发与重定向的差异!
- java开发微信将消息转发到多客服
- java开发微信将消息转发到指定客服
- 转发: 手机开发资源
- 转发 、JSP开发常见问题
- 转发、JSP开发常见问题
- java开发模式
- java web开发模式
- Java Web开发模式
- Java Web开发模式
- java web开发模式
- java web 开发模式
- Java Web开发模式
- Java之实例变量和类变量
- 九度 OJ 1170:找最小数
- c++第六次作业
- 二分查找
- app注册和第一次登录后自动登录,但是没有退出功能,待修改
- 转发Java开发三种单例模式
- 百度之星-瞬间移动 组合数学逆元
- ZigZag Conversion
- zabbix微信报警之企业号
- html+css 实现文本固定长度,超出显示省略号
- 【Android】Android Emulator初探
- LeetCode Max Points on a Line
- Fresco框架的介绍
- c++指针问题