10.JAVA编程之单例设计模式

单例模式设计:保证一个类仅有一个实例,并提供一个访问它的全局访问点

1.构造方法私有化

2.声明一个本类对象

3.给外部提供一个静态方法获取对象实例

两种实现方式:

1.饿汉式 :在类被加载后,对象被创建,到程序结束后释放

2.懒汉式:在第一次调用getInstance方法时,对象被创建,到程序结束后释放

饿汉式占用内存的时间长,效率高;懒汉式占用内存的时间短,效率低,建议使用懒汉式!

在项目中,为什么使用单例,单例有什么好处?

1.在设计一些工具类的时候,通常工具类只有功能方法,没有属性,

2.工具类可能会被频繁调用

目的是为了节省重复创建对象所带来的内存消耗,从而来提高效率

能不能使用构造方法私有化+静态方法来替代单例呢?

能,但是效果没有单例模式节约内存空间

代码:

public class Demo {

public static void main(String[] args) {

//不能直接实例化Singleton1 S = new Singleton1();

        // 只能

        Singleton1 s1 = Singleton1.getInstance();

        s1.print();

        //一个对象,两个引用

        Singleton1 s2 = Singleton1.getInstance();

        s2.print();

        System.out.println(s1 == s2);

        Singleton2 s3 = Singleton2.getInstance();

        s3.print();

        Tools.print1();

        Tools.print2();

    }

}

//饿汉式

    class Singleton1 {

//构造方法私有化

        private Singleton1() {

}

//声明一个本类对象

        private static Singleton1s =new Singleton1();

        //给外部提供一个静态方法获取对象实例

        public static Singleton1getInstance() {

return s;

        }

public void print() {

System.out.println("测试方法");

        }

}

//懒汉式

class Singleton2{

private Singleton2() {};

    private static Singleton2s ;

    public static Singleton2getInstance()

{

if(s==null)

{

s=new Singleton2();

        }

return s;

    }

public void print()

{

System.out.println("测试方法2");

    }

}

//使用构造方法私有化+静态方法来实现工具类 ,比如Math

class Tools{

private Tools(){}

public static void print1()

{

System.out.println("1");

    }

public static void print2()

{

System.out.println("2");

    }

}

运行效果:

你可能感兴趣的:(10.JAVA编程之单例设计模式)