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());
    
        }
    
    }
    双重锁
  • 相关阅读:
    cocos2d-x Tests讲解 Particle System(粒子系统)
    c++ 知识点
    详解C/C++函数指针声明
    VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
    cocos2d-x学习知识点记录
    Ogre实现简单地形
    Ogre内部渲染流程分析系列
    gcc/g++编译
    gcc和g++的区别
    Hack with rewrite
  • 原文地址:https://www.cnblogs.com/wwlw/p/7553578.html
Copyright © 2011-2022 走看看