单例模式的好处
来源:互联网 发布:苹果8没网络连接 编辑:程序博客网 时间:2024/05/11 20:09
需求大部分时候,我们把类的构造器定义成public访问权限,允许任何类自由创建这个类的实例对象,但是某些时候,允许其他类自由创建这个类的对象没有任何意义,还可能造成了系统性能的下降(因为创建一个对象的系统开销问题),例如系统可能自己hi有一个窗口管理器,一个假脱机打印设备或者一个数据库引擎访问点,这个时候如果在系统中创建多个对象就没有太大的时机意义,
如果一个类始终只能创建一个实例,则这个类就被称为单例类
这个时候我们就应该把类的构造器用private修饰,从而把这个类的所有构造器隐藏起来
根据封装型的原则:一旦把类的构造器隐藏起来,就需要提供一个public方法作为这个类的访问点,用于创建这个类的对象,且这个方法必须是static修饰(因为调用这个方法之前还不存在对象,因此调用这个方法不可能是对象,只能是类);
不仅如此,这个类还必须缓存已经创建的对象,不然这个类无法知道是不是已经创建了一个对象,也就无法只保证只创建了一个对象了,为此我们需要提供一个属性来保存曾经创建的对象,因为这个属性要被上面的静态方法访问,所以必须要用static修饰
下面我们用程序来说明这一点[code=java]package cn.itcast.heima
class Singleton
{
//使用一个变量来缓存曾经创建的实例
private static Singleton instance;
//将构造器使用private修饰,隐藏该构造器
private Singleton(){}
//提供一个静态方法,用于返回Singleton实例
//该方法可以加入自定义的控制,保证只产生一个Singleton对象
public static Singleton getInstance()
{
//如果instance为null,表明还不曾创建Singleton对象
//如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法
if (instance == null)
{
//创建一个Singleton对象,并将其缓存起来
instance = new Singleton();
}
return instance;
}
}
public class TestSingleton
{
public static void main(String[] args)
{
//创建Singleton对象不能通过构造器,只能通过getInstance方法
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
//将输出true
System.out.println(s1 == s2);
}
}[/code]
如果一个类始终只能创建一个实例,则这个类就被称为单例类
这个时候我们就应该把类的构造器用private修饰,从而把这个类的所有构造器隐藏起来
根据封装型的原则:一旦把类的构造器隐藏起来,就需要提供一个public方法作为这个类的访问点,用于创建这个类的对象,且这个方法必须是static修饰(因为调用这个方法之前还不存在对象,因此调用这个方法不可能是对象,只能是类);
不仅如此,这个类还必须缓存已经创建的对象,不然这个类无法知道是不是已经创建了一个对象,也就无法只保证只创建了一个对象了,为此我们需要提供一个属性来保存曾经创建的对象,因为这个属性要被上面的静态方法访问,所以必须要用static修饰
下面我们用程序来说明这一点[code=java]package cn.itcast.heima
class Singleton
{
//使用一个变量来缓存曾经创建的实例
private static Singleton instance;
//将构造器使用private修饰,隐藏该构造器
private Singleton(){}
//提供一个静态方法,用于返回Singleton实例
//该方法可以加入自定义的控制,保证只产生一个Singleton对象
public static Singleton getInstance()
{
//如果instance为null,表明还不曾创建Singleton对象
//如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法
if (instance == null)
{
//创建一个Singleton对象,并将其缓存起来
instance = new Singleton();
}
return instance;
}
}
public class TestSingleton
{
public static void main(String[] args)
{
//创建Singleton对象不能通过构造器,只能通过getInstance方法
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
//将输出true
System.out.println(s1 == s2);
}
}[/code]
- 单例模式的好处
- 单例模式的好处
- 单例模式的好处
- java 单例模式的好处
- java 单例模式的好处
- 单例模式的好处1
- java 单例模式的好处
- Java 单例模式 好处
- 单例模式的好处和缺点?为什么要用单例模式?
- 转摘—Java中用单例模式的好处
- 单例模式跟全局变量相比的好处
- 工作笔记:单例模式的作用好处和代码
- 单例模式有什么好处
- 单例模式有什么好处
- 文章标题单例模式的好处和缺点?为什么要用单例模式?
- java枚举单例的好处
- 单例模式的八种写法比较、枚举实现的好处、静态内部类实现单例原理
- 单例模式的八种写法比较、枚举实现的好处、静态内部类实现单例原理
- JAVA设计模式 — 原型模式(Prototype)
- Android Wifi AP软件对比
- C# Socket简单例子(服务器与客户端通信)
- Android Wifi调试
- NLS编程
- 单例模式的好处
- wifi移植的学习
- C# Socket实例(适合初学者)
- 2012下半年度期末总结
- iOS6.0 框架及功能更新小结
- Qualcomm手机开机全过程
- c++ 注意
- 学习Linux系统的十一点建议
- javaScript的一些属性