A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑泽霖 中级黑马   /  2014-11-17 14:14  /  787 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例模式
1定义
对象唯一性,只允许一个对象存在
不让其他程序创建对象,在本类中创建对象
创建后给其他程序提供访问的方式
私有化构造函数
定义访问函数,其他程序通过这个函数获取本类对象
2饿汉式
class Single
{
Single s=new Single();
private Single()
{
}
Single getInstance()
{
return s;
}
}
但是怎么调用这个getInstance方法?在不能在外部实例化对象的情况下?
结论:把getInstance置为静态方法
class Single
{
private static Single s=new Single();
//为了防止直接访问s对象,所以应该置为private
private Single()
{
}
public static Single getInstance()
{
return s;
}
}

class SingDemo
{
public static void main(String arg[])
{
Single ss=Single.getInstance();
Single ss2=Single.getInstance();//ss和ss2是同一个对象
}
}
这样类Single就只有一个对象了!
3懒汉式
class Single2
{
private static Single2 s2=null;
private Single2()
{
}
public static Single2 getInstance()
{
if(s2==null)
s2=new Single2();
//在要使用这个类的对象时才去new对象
return s2;
}
}
第三种可能是集合或内部类

1 个回复

倒序浏览
1格式
new Car().run();
//匿名对象的作用就是简化书写
java对象都是存在于堆中的,Java所有的类都是引用类型的,相当于C++中的指针类型,C++的对象可以是堆中的也可以是栈中的。
匿名对象只存在于构造该对象的那行代码,离开那条代码后对象即销毁

2C++匿名对象
class Some
{int n;
public:
Some(int s){n=s;}
~Some(){cout<<”destroy\n”;}
int ret(){return n;};
int main(int argc,char* argv[])
{
cout<<Some(111).ret()<<’\n”;
cout<<”wait\n”;
cin.get()
return 0;
}
结果:输出:111 destroy wait
匿名对象只存在于构造该对象的那行代码,离开那条代码后立即调用析构函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马