• 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;
        }
    }
  • 相关阅读:
    卡尔曼滤波器的简单推导
    data_quick 进度
    面试
    MapServer+TileCache+Apache+Python24 构建KS数据服务器
    PYTHONPATH 可以跨版本 方便使用 (本文为windows方法)转~
    20130923
    20130909
    error C2504 类的多层继承 头文件包含
    int long 等基础类型在不同平台的大小
    mysql python image 图像存储读取
  • 原文地址:https://www.cnblogs.com/yyanghang/p/11157891.html
Copyright © 2020-2023  润新知