Java设计模式 -----单例模式(饿汉式)

 

单例设计模式:一个类中只允许产生一个实例化对象。

第一,首先考虑如何让限制对象的数量。

        平常在普通方法中则是类的外部通过对象调用,无法达到限制对象数量的目的。

package www.bit.java;

class Singleton {
    public void print(){
        System.out.println("Helloworld");
    }
}
public class SingletonTest {
    public static void main(String[] args) {
        //实例化对象
        Singleton singleton1 = new Singleton();
        singleton1.print();
    }
}

        所以需要用private生命构造方法,则对象的产生是通过构造方法产生对象。

class Singleton {
    //private声明构造,限制在外部产生对象的方法
    private Singleton(){};
    public void print(){
        System.out.println("Helloworld");
    }
}

第二,构造方法私有后,外部不能调用构造。

       当外部无法调用构造方法,即外部不能够产生新的实例化对象,此时类则处于一个相对而言封闭的状态,如果继续想要使用Singleton该类调用print方法,则必须提供实例化对象。

      考虑到封装的特点,可以在类的内部产生一个实例化对象。

class Singleton{
    //在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象
    Singleton singleton = new Singleton();
    //private声明构造,限制在外部产生对象的方法
    private Singleton(){};
    public void print(){
        System.out.println("Helloworld");
    }
}

第三,Singleton无法实例化对象时,对singleton进行使用。

       Singleton内部的singleton是一个普通属性,所有的普通属性必须在有实例化对象时才能进行内部空间的分配,则使用static关键字通过类名称调用,并且静态属性在类加载时只初始化一次,产生一个实例化对象。

static Singleton singleton = new Singleton();

第四,类中属性使用private封装,并提供一个static的geter()方法。

       类中属性被private封装后,想取得其属性应提供geter()方法,而此时访问static属性,因为static方法不受对象实例化控制,因此应提供一个static的geter()方法。

class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){};
    public static Singleton getSingleton(){
        return singleton;
    };
    public void printO(){
        System.out.println("Helloworld");
    }
}

第五,使用final关键字,在整体操作中只产生唯一一个实例化对象。

     最终得到饿汉式:


class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){};
    public static Singleton getSingleton(){
        return singleton;
    };
    public void printO(){
        System.out.println("Helloworld");
    }
}
public class SingletonTest{
    public static void main(String[]args){
        Singleton singleton = Singleton.getSingleton();
        singleton.print();
    }
}

懒汉式单例:

      特点:    当第一次使用Singleton对象时才会为其产生实例化对象的操作。

class Singleton{
    private  static Singleton singleton;
    private Singleton(){};//private声明构造

    public static Singleton getSingleton() {
        if (singleton == null){//表示此时还没有实例化
            singleton = new Singleton();
        }
        return singleton;
    }
    public void print(){
        System.out.println("Helloworld");
    }
}
public class SingletonTest{
    public static void main(String[]args){
        Singleton singleton = Singleton.getSingleton();
        singleton.print();
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值