1. class Singleton { final static boolean created = true; public Singleton() { created = false; }
public static Singleton create() { if (created) { return new Singleton(); } return null; } } 2. String a, b; a += b; a = a + b; a = new String(a + b); a = new StringBuffer(a).append(b); ...
楼上的是singleton吗? 的确是singleton,只不过这个singleton是指只能第一个人获得,其他人都只能获得null class Singleton{ private Singleton s = new Singleton(); private Singleton(){} public Singleton getInstance(){return s;} }
final static boolean created = true; //final? public Singleton() { created = false; //final? }
是啊。。都已经final了还能在改么?还有只能返回一个。。所以楼上的说的对啊。
class Singleton{ private static s; private Singleton(){} public static Singleton getInstance(){ if(s == null){ s = new Sigleton(); } return s; } public final static void main(String[] args){ Sigleton st = Sigleton.getInstance(); //todo use the st } }
>>2.以代码方式列出你所知道的连接字符串的各种方法. “知道”一词太过无理。
class Singleton{ private static final private Singleton s = new Singleton(); private Singleton(){} public Singleton getInstance(){return s;} } 我觉得这才是单态; private static final private Singleton s = new Singleton(); 这行必须加上static final ,不然如果一个对象继承了Singleton类,对s变量做了修改,再把s上溯为Singleton类的话,就会产生两个Singleton类的实例
class Singleton{ private Singleton s = new Singleton(); private Singleton(){} public Singleton getInstance(){return s;} } 也不对,private Singleton(){}都私有了,如何调用getInstance(),你都不能创建对象了.正确的应该都加上statice. private static final Singleton s = new Singleton(); public static Singleton getInstance(){return s;}
class Singleton{ private Singleton s = new Singleton(); private Singleton(){} public static Singleton getInstance(){return s;} } 对不起,这样才对 构造方法必须私有
第一种形式: public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很奇怪? //注意这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() { return instance; } } 第二种形式:public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } 我是新人
M1: Singleton class { private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } } M2: Singleton class { private static Singleton instance; public static Singleton getInstance() { return (instance == null) ? instance = new Singleton() : instance; } }a += b a = a.concat(b);
第一种形式: public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } } 其中: private static Singleton instance = new Singleton(); 每个对像都有个对像监视器,而静态成员变量之所以能达到同步,是因为它的监视器是它本身的class类所提供的. public class Singleton { private Singleton(){} 私有构造函数是必要的,这是为了不能在单件模式中设计构造方法构造singleton第二种形式:public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 ? 这句话是错误的,因为这方法比上面没任何改进,而且还有所降低,虽然上面的是懒汉型的,但是它的对像监视器是class,而不是this对像,所以要比这个用 synchronized 达到同步的要好,而我们为什么要采用synchronized ,或是lock(this),lock(obj)是因为我们还要在if()语句块中写其它代码,比如multiton,比如初始化点东西等等. //使用时生成实例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } 第三种形式: class Singleton{ private static Singleton s; private Singleton(){} public static Singleton getInstance(){ lock(this){//这里可以lock(obj),lock(this)采用this对像的监视器,跟synchronized所用的是同一个监视器this,所以他们都可以构建临界区. if(s == null){ s = new Sigleton(); } } return s; }如果大家对23 种基本模式及23以外的比如模式扩展等有问题或想交流的,可以加我QQ:85177960
这水平就能拿高薪了?
class Singleton {
final static boolean created = true; public Singleton() {
created = false;
}
public static Singleton create() {
if (created) {
return new Singleton();
}
return null;
}
}
2. String a, b;
a += b;
a = a + b;
a = new String(a + b);
a = new StringBuffer(a).append(b);
...
的确是singleton,只不过这个singleton是指只能第一个人获得,其他人都只能获得null
class Singleton{
private Singleton s = new Singleton();
private Singleton(){}
public Singleton getInstance(){return s;}
}
public Singleton() {
created = false; //final?
}
private static s;
private Singleton(){}
public static Singleton getInstance(){
if(s == null){
s = new Sigleton();
}
return s;
} public final static void main(String[] args){
Sigleton st = Sigleton.getInstance();
//todo use the st
}
}
“知道”一词太过无理。
private static final private Singleton s = new Singleton();
private Singleton(){}
public Singleton getInstance(){return s;}
}
我觉得这才是单态;
private static final private Singleton s = new Singleton();
这行必须加上static final ,不然如果一个对象继承了Singleton类,对s变量做了修改,再把s上溯为Singleton类的话,就会产生两个Singleton类的实例
private Singleton s = new Singleton();
private Singleton(){}
public Singleton getInstance(){return s;}
}
也不对,private Singleton(){}都私有了,如何调用getInstance(),你都不能创建对象了.正确的应该都加上statice.
private static final Singleton s = new Singleton();
public static Singleton getInstance(){return s;}
private Singleton s = new Singleton();
private Singleton(){}
public static Singleton getInstance(){return s;}
}
对不起,这样才对
构造方法必须私有
第一种形式:
public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:public class Singleton {
private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; } } 我是新人
Singleton class {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
M2:
Singleton class {
private static Singleton instance;
public static Singleton getInstance() {
return (instance == null) ? instance = new Singleton() : instance;
}
}a += b
a = a.concat(b);
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
其中:
private static Singleton instance = new Singleton();
每个对像都有个对像监视器,而静态成员变量之所以能达到同步,是因为它的监视器是它本身的class类所提供的.
public class Singleton {
private Singleton(){}
私有构造函数是必要的,这是为了不能在单件模式中设计构造方法构造singleton第二种形式:public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 ?
这句话是错误的,因为这方法比上面没任何改进,而且还有所降低,虽然上面的是懒汉型的,但是它的对像监视器是class,而不是this对像,所以要比这个用 synchronized 达到同步的要好,而我们为什么要采用synchronized ,或是lock(this),lock(obj)是因为我们还要在if()语句块中写其它代码,比如multiton,比如初始化点东西等等.
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; } }
第三种形式:
class Singleton{
private static Singleton s;
private Singleton(){}
public static Singleton getInstance(){
lock(this){//这里可以lock(obj),lock(this)采用this对像的监视器,跟synchronized所用的是同一个监视器this,所以他们都可以构建临界区.
if(s == null){
s = new Sigleton();
}
}
return s;
}如果大家对23 种基本模式及23以外的比如模式扩展等有问题或想交流的,可以加我QQ:85177960
我们可以采用+号对连接字符串,可以通过stringbuffer速度比stringbuilder稍慢,但它支持多线程;stringbuilder速度快,但不支持多线程.
厉害