设计模式--单例模式

  1.  
  2.  

  3.  

     

    package com.model.danli;
    
    import java.util.ArrayList;
    
    /**
     * @Description:测试类
     * @Author: 张紫韩
     * @Crete 2021/7/2 16:40
     * 单例模式:饿汉式,懒汉式
     */
    public class DanLiMoShiDemo01 {
        public static void main(String[] args) {
            GirlFriend girlFriend = GirlFriend.getGirlFriend();
            GirlFriend girlFriend1 = GirlFriend.getGirlFriend();
            System.out.println(girlFriend1 == girlFriend);
    
            GirlFriend02 girlFriend02 = GirlFriend02.getGirlFriend02();
            GirlFriend02 girlFriend03 = GirlFriend02.getGirlFriend02();
            System.out.println(girlFriend03==girlFriend02);
    
    
    
    
    
        }
    }
    //饿汉式
    class GirlFriend{
        private String name;
        private int age;
    
        /**
         * 1.构造器私有化
         * 2.在类的内部直接创建对象
         * 3.提供一个公共的static的方法,返回类的对象
         *  在类加载的时候创建单例模式对象
         * */
        private static GirlFriend girlFriend=new GirlFriend();
        private GirlFriend() { }
    
        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 GirlFriend getGirlFriend() {
            return girlFriend;
        }
    
        @Override
        public String toString() {
            return "GirlFriend{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    class GirlFriend02{
        /**
         * 1.构造器私有化
         * 2.定义一个static修斯的类对象
         * 3.提供一个static修饰的public方法,返回这个类对象
         * 4.提供的public方法,判断是否已经创建过对象,如果创建过就返回上次创建的类对象,从而保证单例模式
         * */
        private String name;
        private int age;
        private static volatile GirlFriend02 girlFriend02;
    
        private GirlFriend02(){ }
        public static GirlFriend02 getGirlFriend02(){
            if (girlFriend02==null){
                synchronized (GirlFriend02.class){
                    if (girlFriend02==null){
                        girlFriend02=new GirlFriend02();
                    }
                }
            }
            return girlFriend02;
        }
    //    单例线程模式下可以,多线程时无法保证单例
    //    public static GirlFriend02 getGirlFriend02(){
    //                if (girlFriend02==null){
    //                    girlFriend02=new GirlFriend02();
    //                }
    //        return girlFriend02;
    //        }
    
    
        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;
        }
    
        @Override
        public String toString() {
            return "GirlFriend02{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
posted @ 2021-07-02 17:18  张紫韩  阅读(26)  评论(0编辑  收藏  举报