zoukankan      html  css  js  c++  java
  • 单例模式

    1.掌握我们设计模式中的 6 大设计原则!
    
      01.里氏替换
      02.单一职责
      03.依赖倒置
      04.接口隔离
      05.开闭原则
      06.迪米特法则
      
    java中有常用的23种设计模式!
    
    
     单例模式:
        01.在整个应用程序中,一个类只有一个实例对象!    (之前我们一个类创建N个对象  原型/多例)
        02.这个实例对象只能在本类中创建!   本类的构造方法私有化!
        03.在类中创建一个供外部访问的接口,得到实例对象!      类创建就是需要别人访问的!
        04.无论我们创建多少个对象实例,其实都是在操作同一个对象实例
     
     
     
    实现单例类的步骤:
       01.创建一个静态的需要设置成单例类的 属性!
       02.私有化构造
       03.创建一个供外部访问的接口
     
    
    具体实现的方式:
       01.懒汉式
       02.饿汉式
       03.双重锁
    2.代码:
    /**
     * 懒汉式  实现 单例
     */
    public class Student {
        // 01.创建一个静态的需要设置成单例类的 属性!
        private static Student student;
    
        // 02.私有化构造
        private Student() {
        }
    
        // 03.创建一个供外部访问的接口
        public static synchronized Student getInstance() {
            if (student == null) { // 判断对象是否有值
                student = new Student();
            }
            return student;
        }
    
        private String name; // 姓名
        private int age; // 年龄
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        // 测试方法
        public static void main(String[] args) {
    
            // 创建3个student对象
            Student stu1 = Student.getInstance();
            Student stu2 = Student.getInstance();
            stu2.setName("小黑");
            Student stu3 = Student.getInstance();
            stu3.setAge(50);
            System.out.println(stu1 == stu2);
            System.out.println(stu2 == stu3);
            System.out.println(stu1.getName());
            System.out.println(stu1.getAge());
    
        }
    
    }
    懒汉式
    /**
     * 饿汉式  实现 单例
     */
    public class Student2 {
        // 01.创建一个静态的需要设置成单例类的 属性!
        private static Student2 student = new Student2();
    
        // 02.私有化构造
        private Student2() {
        }
    
        // 03.创建一个供外部访问的接口
        public static synchronized Student2 getInstance() {
            return student;
        }
    
        private String name; // 姓名
        private int age; // 年龄
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        // 测试方法
        public static void main(String[] args) {
    
            // 创建3个student对象
            Student2 stu1 = Student2.getInstance();
            Student2 stu2 = Student2.getInstance();
            stu2.setName("小黑");
            Student2 stu3 = Student2.getInstance();
            stu3.setAge(50);
            System.out.println(stu1 == stu2);
            System.out.println(stu2 == stu3);
            System.out.println(stu1.getName());
            System.out.println(stu1.getAge());
    
        }
    
    }
    饿汉式
    /**
     * 双重锁  实现 单例
     */
    public class Student3 {
        // 01.创建一个静态的需要设置成单例类的 属性!
        private static Student3 student;
    
        // 02.私有化构造
        private Student3() {
        }
    
        // 03.创建一个供外部访问的接口
        public static synchronized Student3 getInstance() {
            if (student == null) {
                synchronized (Student3.class) {
                    if (student == null) {
                        student = new Student3();
                    }
                }
            }
            return student;
        }
    
        private String name; // 姓名
        private int age; // 年龄
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        // 测试方法
        public static void main(String[] args) {
    
            // 创建3个student对象
            Student3 stu1 = Student3.getInstance();
            Student3 stu2 = Student3.getInstance();
            stu2.setName("小黑");
            Student3 stu3 = Student3.getInstance();
            stu3.setAge(50);
            System.out.println(stu1 == stu2);
            System.out.println(stu2 == stu3);
            System.out.println(stu1.getName());
            System.out.println(stu1.getAge());
    
        }
    
    }
    双重锁
  • 相关阅读:
    SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象【转载】
    springcloud 的loadbalancer 轮询算法切换方法 2021.4.3
    springboot项目启动增加图标
    rabbitmq 端口作用以及修改方法
    centos8 安装rabbitmq
    springcloud config client Value获取不到信息的问题的处理方法
    springcloud config配置git作为数据源然后启动报错 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    Sublime Text的列模式如何操作
    centos8 安装redis
    jQuery简单的Ajax调用
  • 原文地址:https://www.cnblogs.com/wwlw/p/7553578.html
Copyright © 2011-2022 走看看