zoukankan      html  css  js  c++  java
  • Java

    设计模式分为三类
     1.创建型模式(5种)----->用于解决对象创建的过程
        单例模式  工厂方法模式   抽象工厂模式   建造者模式   原型模式
     2.结构型模式(7种)----->把类或对象通过某种形式结合在一起  构成某种复杂或合理的结构 
        适配器模式  装饰者模式   代理模式  外观模式   桥接模式   组合模式   享元模式
     3.行为型模式(11种)---->用来解决类或对象之间的交互  更合理的优化类或对象之间的关系
        观察者模式  策略模式  模板模式  责任链模式  解析器模式  迭代子模式
        命令模式  状态模式  备忘录模式  访问者模式  中介者模式

    单例模式:

    单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化类的对象。

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

    注意:

    • 单例类只能有一个实例;
    • 单例类必须自己创建自己的唯一实例;
    • 单例类必须给所有其他对象提供这一实例。

    单例模式的实现:

    1.饿汉式(立即加载,对象启动时就开始加载):

      不会产生对象没有就拿来使用的问题  空指针异常
           启动项目加载的对象过多  有些还没有使用  产生服务器承载压力的问题

    //饿汉式,在第一次调用的时候实例化自己
    public class SingleTon {
        //1.因为共有的 外面可以随意创建镀锡,所以让构造方法变成私有---保证外面不可以随便创建对象
        private SingleTon(){}
        //2.因为单例是单例,而不是无例,所以必须在属性、方法、构造方法、块中创建一个唯一的对象(new一个对象);
        //属性
        //方法------不行  每一次执行都会产生一个过程new一个对象  保证不了唯一
        //构造方法--不行  它是私有的  本身就是这个构建过程
        //块--------不行  没有返回值  创建了对象也无法给别人使用
    
        //静态元素只加载一次,如果不加,则会出现栈内存溢出
        //必须为私有的,防止直接访问
        private static SingleTon single = new SingleTon();
        //静态工厂方法
        //3.提供一个获取单个对象的方法给用户
        //   返回值  将对象返回出去
        //static 可以直接通过类名访问方法
        public static SingleTon getSingleTon(){
            return single;
        }
    }

    public class TestMain {
    public static void main(String[] args){
    SingleTon s1 = SingleTon.getSingleTon();
    SingleTon s2 = SingleTon.getSingleTon();
    System.out.println(s1==s2);//true 比较地址
    System.out.println(s1.equals(s2));//true Object类继承过来的 默认也比地址
    System.out.println(s1);//类全名@hashCode--->16进制的整数
    System.out.println(s2);
    }
    }
     

    2.懒汉式(延迟加载,用到对象才加载):

           可能会由于没有操作好  导致异常(很严谨)
           启动项目时候只有需要的加载  不需要的还没有创建  不会浪费空间

    public class SingleTon {
        private SingleTon(){}
        private static SingleTon single = null;
        public static SingleTon getSingleTon(){
            if(single == null) {
                single = new SingleTon();
            }
            return single;
        }
    }
  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/yyanghang/p/11157891.html
Copyright © 2011-2022 走看看