单例设计模式

分析:

    1.为了限制多个实例化对象的产生,我们使用private修饰构造方法,private 修饰符的特点是,当某方法被private修饰,外部类无法调用该方法,该方法只能被本类调用。所以当使用private 关键字修饰了本类的构造方法后,构造方法私有化,无法从外部进行构造方法的调用。此时,在不改变本类的情况下,如何能让外部类得到该实例化对象?

    2.解决的办法是:在本类中实例化好该对象instance,此时内部声明的instance属性属于一个普通属性,访问该属性,就必须先实例化好本对象,然后通过本对象访问该属性,但现在外部无法实例化对象,此时我们考虑static关键字,因为static不受实例化对象的控制。此时我们就以使用static 关键字来修饰该属性。

    3.类中的属性一般都要使用private关键字进行封装,当我们使用private 关键字封装该属性后,就需要提供静态公有方法,让外部类通过该静态方法得到实例化对象。

    4.但我们发现,上面的做法虽然限制了从外部类直接实例化对象,但通过本类,依然可以实例化多个对象,因此我们进一步使用final关键字修饰该instance属性,以此达到对象只能被实例化一次的目的。

单例模式的核心思想在于:构造方法私有化,外部无法产生新的实例化对象,只能通过类提供的static 方法取得唯一的一个对象的引用,不管外部声明了多少了对象,但实际只存在一个实例化对象。

其内存图如下图所示:

 

 

//单例设计模式

class Singleton{

private static final Singleton INSTANCE = new Singleton(); //实例化私有对象

public static Singleton getInstance(){   //提供访问该私有化对象的静态方法

return INSTANCE;

}

private Singleton(){} //构造方法私有化

public void sayTo(){

System.out.println("我是单例模式");

}

}

public class SingletonTest{

public static void main(String[] args){

 Singleton instA = null; //声明对象

 Singleton instB = null;

 Singleton instC = null;

 instA = Singleton.getInstance(); //拿到私有化对象

 instA.sayTo();                 //调用sayTo()方法

 instB = Singleton.getInstance();

 instB.sayTo();

 instC = Singleton.getInstance();

  instC.sayTo(); 

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值