Java设计模式之单例模式

1.单例设计模式概述

单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。

2.单例模式优点

在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

3.单例模式缺点

没有抽象层,因此扩展很难。职责过重,在一定程序上违背了单一职责。

注意:单例模式的实现由两种情况
1).饿汉式(类一加载就创建对象)
(1)构建单例模式的类

public class Student {
    // 构造私有
    private Student() {
    }
    // 自己造一个
    // 静态方法只能访问静态成员变量,加静态
    // 为了不让外界直接访问修改这个值,加private
    private static Student s = new Student();

    // 提供公共的访问方式
    // 为了保证外界能够直接使用该方法,加静态
    public static Student getStudent() {
        return s;
    }
}

(2)进行测试和分析

/*
 * 单例模式:保证类在内存中只有一个对象。
 * 
 * 如何保证类在内存中只有一个对象呢?
 *      A:把构造方法私有
 *      B:在成员位置自己创建一个对象
 *      C:通过一个公共的方法提供访问
 */
public class StudentDemo {
    public static void main(String[] args) {
        // Student s1 = new Student();
        // Student s2 = new Student();
        // System.out.println(s1 == s2); // false

        // 通过单例如何得到对象呢?

        // Student.s = null;

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

        System.out.println(s1); // null,cn.itcast_03.Student@175078b
        System.out.println(s2);// null,cn.itcast_03.Student@175078b
    }
}

2).懒汉式(用的时候,才去创建对象)
(1)构建单例模式的类

/*
 * 
 * 面试题:单例模式的思想是什么?请写一个代码体现。
 * 
 *      开发:饿汉式(是不会出问题的单例模式)
 *      面试:懒汉式(可能会出问题的单例模式)
 *          A:懒加载(延迟加载) 
 *          B:线程安全问题
 *              a:是否多线程环境   是
 *              b:是否有共享数据   是
 *              c:是否有多条语句操作共享数据     是
 */
public class Teacher {
    private Teacher() {
    }

    private static Teacher t = null;

    public synchronized static Teacher getTeacher() {   //可能出现线程安全问题所以用synchronizd
        // t1,t2,t3
        if (t == null) {
            //t1,t2,t3
            t = new Teacher();
        }
        return t;
    }
}

(2)进行测试与分析

public class TeacherDemo {
    public static void main(String[] args) {
        Teacher t1 = Teacher.getTeacher();
        Teacher t2 = Teacher.getTeacher();
        System.out.println(t1 == t2);
        System.out.println(t1); // cn.itcast_03.Teacher@175078b
        System.out.println(t2);// cn.itcast_03.Teacher@175078b
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值