zoukankan      html  css  js  c++  java
  • 单例模式(singleton)java实现

    //20210117
    写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现单例模式

    单例模式概念:

    • 私有化构造器,让一个类只能拥有一个实例化对象,并创建静态方法用以获取该对象

    饿汉式

    • 无论是否调用,都先自己创建对象
    • 源代码如下:
    /**
     * hunger man mode
     */
    public class HungerSingleton {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private static volatile HungerSingleton hungerSingleton;
    
        private HungerSingleton(){}
    
        public static HungerSingleton newInstance(){
    
            return hungerSingleton;
        }
    }
    
    

    懒汉式

    • 只有在请求的时候才创建对象
    • 程序源代码如下:
    /**
     * lazy man mode
     */
    public class LazySingleton {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        private static volatile LazySingleton lazySingleton;
    
        private LazySingleton(){}
    
        public static LazySingleton newInstance(){
            if(lazySingleton==null){
                lazySingleton = new LazySingleton();
            }
            return lazySingleton;
        }
    }
    
    

    双重加锁式

    • 该模式是饿汉式的线程安全版
    • 程序源代码如下:
    public class Singleton_Double_Check {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private static volatile Singleton_Double_Check singletonDoubleCheck;
        private final static Object lock_ = new Object();
        //私有化构造器
        private Singleton_Double_Check(){
    
        }
    
        public static Singleton_Double_Check newInstance(){
            if(singletonDoubleCheck ==null){
                synchronized (lock_){
                    if(singletonDoubleCheck ==null){
                        singletonDoubleCheck = new Singleton_Double_Check();
                    }
                    return singletonDoubleCheck;
                }
            }
            return singletonDoubleCheck;
        }
    }
    
    

    以上
    希望对大家有所帮助

  • 相关阅读:
    .NET 开源GIS解决方案一 概述
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    C# Winform欢迎窗体实现()
    Log4Net使用指南(转)
    DotNet经典面试题(转载)
    这是一篇测试文章
    每天进步一点点
    博客园公告栏添加两个有趣的控件
    eclipse下查看maven下载的源码中文乱码问题
    WEB 基础知识(一)
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14288651.html
Copyright © 2011-2022 走看看