• 单例模式


    单例模式优点:
    减少内存开支,特别是一个对象需要频繁地创建、销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显
    当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决
    单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作
    单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理
    单例模式的缺点:
    扩展困难
    在并行开发环境中,如果单例模式没有完成,是不能进行测试的
    单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑,而不关心它是否单例的,是不是啊哟单例取决于环境,单例模式把“要单例”和业务逻辑融合在一个类中
     
    单例模式的使用场景:
    要求生成唯一序列号的环境;
    在整个项目中需要一个共享访问点或共享数据
    创建一个对象需要消耗的资源过多
    需要定义大量的静态常量和静态方法的环境
     
    饿汉式:
    public class Singleton{
        private static final Singleton singleton = new Singleton();
     
        private Singleton(){}
     
        public static Singleton getInstance(){
            return singleton;
        }
    }
     
    懒汉式(存在线程安全问题):
    public class Singleton{
        private static Singleton singleton = null;
     
        private Singleton(){}
     
        public static Singleton getInstance(){
            if(singleton == null){
                singleton = new Singleton();
            }
            
            return singleton;
        }
    }
     
    单例扩展
    public class Singleton{
        private static int maxNum = 2;
        
        private static ArrayList<String> list = new ArrayList<String>();
        private static ArrayList<Singleton> singletonList = new ArrayList<Singleton>();
     
        static{
            for(int i = 0; i < maxNum; i++){
                list.add(new Singleton("abc" + i));
            }
        }
     
        private Singleton(){}
     
        private Singleton(String param){
            list.add(param);
        }
     
        public static Singleton getInstance(){
            Random random = new Random();
            int num = random.nextInt(maxNum);
            return singletonList.get(num);
        }
     
    }
  • 相关阅读:
    Linux 下的类似Windows下Everything的搜索工具
    windows和linux环境下制作U盘启动盘
    程序调试手段之gdb, vxworks shell
    LeetCode 1021. Remove Outermost Parentheses (删除最外层的括号)
    LeetCode 1047. Remove All Adjacent Duplicates In String (删除字符串中的所有相邻重复项)
    LeetCode 844. Backspace String Compare (比较含退格的字符串)
    LeetCode 860. Lemonade Change (柠檬水找零)
    LeetCode 1221. Split a String in Balanced Strings (分割平衡字符串)
    LeetCode 1046. Last Stone Weight (最后一块石头的重量 )
    LeetCode 746. Min Cost Climbing Stairs (使用最小花费爬楼梯)
  • 原文地址:https://www.cnblogs.com/gqymy/p/12649755.html
Copyright © 2020-2023  润新知