实现并验证单列模式
来源:互联网 发布:java年终总结 编辑:程序博客网 时间:2024/06/08 00:04
单列模式(Singleton)也是应用的比较多的一种设计模式,在软件开发中有时候需要对某个类的对象数量加以限制。比如在GUI程序设计中,某个经常用到的窗口只需要一个就够了,没必要每次用到就去创建新的窗口。而如果至创建一个对象将引用随便传来传去又不太方便,这时候采取单列模式就是比较好的解决方案了。
使用单列模式可以很好的节约资源,尤其是当对象比较大时,对系统开销的节约效果会更加显著。同时由于系统的多个地方共享一个对象,在一定程度上便于控制,
在java中,可以使用以下这种方式使用单例模式创建类的实例:
public classMyBean {
private staticMyBean instance = null;
privateMyBean(){
//do something
}
public staticsynchronized MyBean getInstance(){
if(instance ==null){
instance = newMyBean();
}
returninstance;
}
}
当一个类的实例可以有且只可以一个的时候就需要用到了。为什么只需要有一个呢?有人说是为了节约内存。本人对这个说法持保留态度。只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由。我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?
Singleton模式主要作用是保证在Java中,一个类Class只有一个实例存在。
一般Singleton模式通常有两种形式:
第一种形式: 也是常用的形式。
public classSingleton {
private staticSingleton instance = null;
privateSingleton(){
//do something
}
//这个方法比下面的有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率
public staticSingleton getInstance(){
if(instance==null){
instance = newSingleton();
}
returninstance;
}
}
第二种形式:
public classSingleton {
//在自己内部定义自己的一个实例,只供内部调用
private staticSingleton instance = new Singleton();
privateSingleton(){
//do something
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public staticSingleton getInstance(){
returninstance;
}
}
如何验证单例模式
以前说过,一个对象可以生成多个实例,比如每次使用new来生成相同对象的实例,虽然每个实例都是指向同一个对象,但是各个实例之间是独立的,也就是生成了两个对象,这就不是单例模式了;可以通过boolean类型的输出来验证
public class BooleanTest
{
publicstatic void main (String [] args)
{
Parentparent1 = new Parent ();
Parentparent2 = new Parent ();
System.out.println(parent1 == parent2);
}
}
class Parent
{
publicvoid method ()
{
}
}
输出的结果是false;也就是生成的对象不是同一个对象;
使用private关键字和static来生成单例模式
面试的时候,写个单例模式出来;
public class SingletonTest
{
publicstatic void main (String[] args)
{
Parentparent1 = Parent.method ();
Parentparent2 = Parent.method ();
System.out.println(parent1 == parent2);//验证是否为同一个对象
}
}
class Parent
{
staticParent parent = new Parent ();//知识点;这里将实例定义为static是为了使下面的静态方法可以访问;
//静态的方法只能访问静态的变量
private Parent()
{
}
publicstatic Parent method ( )//定义一个返回类型为Parent的方法,将生成的Parent实例返回给主方法,这样就避免了
//在主方法中生成对象;就完成了单例模式;通过验证可以知道二者生成的对象是同一个对象,指向同一个对象;
{
returnparent;
}
}
- 实现并验证单列模式
- 单列模式实现
- 实现python的单列模式
- 单列设计模式的实现
- Android用单列模式来管理Activity,并实现完全退出
- 设计模式之单列模式:简单实现
- ActionScript3单列模式的一种实现
- 基于c++的单列模式实现。
- 单列模式的多种实现方式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 数据结构学习整理目录
- LeetCode —— Palindrome Partition II
- 由KMP算法谈到BM算法
- TCP/IP学习系列》1》简单讲解
- Linux中的后台运行
- 实现并验证单列模式
- 13.4.7周赛解题报告
- 项目3
- Java设计模式之一(简单工厂模式)
- 2013编程之美-传话游戏
- linux分卷压缩与解压缩
- 指针,const,和typedef别名
- 网站发布图解
- 我喜欢的一种好