单态

来源:互联网 发布:开淘宝网店安全不 编辑:程序博客网 时间:2024/04/18 12:39

单态:就是保证一个类在内存中只有一份(只有一个对象)。也就是类只存在一个实例。

1.别人不能建立对象;所以要私有化(对构造函数私有化),只在我的本类中有效。

2.别人不能建立对象;我就要在本类中建立一个对象,准备让别人来调用。

3.别人要调用我的对象;所以要提供一个方法,来获取我定义的实例。

4.对象不能调用;所以就要是静态的方法。从而成员变为静态的。

class Single{

//1.

         private single(){}

//2.

         private Single s = new Single();

//3.

         publie Single getSingle(){

         return s;

         }

 

}

看上去好像是写完了。

别人如何调用呢?

调用方法的方法(两种):1.用对象调用。2.用类名字调用。

在这里没有对象所以就要用类名来调用。类名想调用所以方法就要是静态的。方法是静态的,所以它访问的成员应该是静态的,也就是

private Single s = new Single();应该给为 private static Single s = new Single();

publie Single getSingle()应该改为 publie static Single getSingle()

 

class Single{

//1.

         private single(){}

//2.

         private static Single s = new Single();

//3.

         publie  static Single getSingle(){

         return s;

         }

         void show(){

         System.out.println("first single");

 

        }

 

}

class DemoSingle{

         public static void man(String[] args){

//获得Single对象

         Single single = Singel.getSingle();

         single.show();

 

          }

              

 

}

在Single  类中只要在想要单态时候才用实现这三步。得到类对象之后就可以用它干别的事情。调用别的方法。 

另外一种单态的写法:

class Single{

//1.

         private single(){}

//2.

         private static Single s = null;

//3.

         publie  static Single getSingle(){

         if(s==null){

          s = new Single();

         }

         return s;

         }

         void show(){

          System.out.println("single second");

         }

 

}

class DemoSingle{

         public static void man(String[] args){

//获得Single对象

         Single single = Singel.getSingle();

         single.show();

 

          }

              

 

}

 

 

在用时候要考虑线程安全。第二种时必须要加关键字synchronied;所以最好用第一种。