zoukankan      html  css  js  c++  java
  • Java初级_单例设计模式

    单例模式:
    要点:
    1,某个类只能有一个实例
    2,必须自行创建实例
    3,必须自行向整个系统提供这个实例。

    实现
    1,只提供私有的构造方法
    2,含有一个该类的静态私有对象
    3,提供一个静态的共有方法用于创建,获取静态私有对象。

    代码实现方案
    1,饿汉式--对象创建过程中实例化
    2,懒汉式--静态共有方法中实例化,用到的时候才进行实例化操作。

    单例模式的实现必须满足(ACD)个条件。(选择三项)

    A类中的构造方法的访问权限必须设置为私有的
    B类中的构造方法必须用protected修饰
    C必须在类中创建该类的静态私有对象
    D在类中提供一个公有的静态方法用于创建、获取静态私有对象

    饿汉式:特点,创建对象实例的时候直接初始化。

    class SingletonOne {
        // 1创建类中私有构造
        private SingletonOne() {
        }// 外部不能创建该实例
    
        // 2创建该类型的私有静态实例
        private static SingletonOne instance = new SingletonOne();
    
        // 3创建共有静态方法,返回静态实例对象。
        public static SingletonOne getInstance() {
            return instance;
        }
    
    }
    
    public class Re {
        public static void main(String[] args) {
            SingletonOne one = SingletonOne.getInstance();
            SingletonOne two = SingletonOne.getInstance();
    
            System.out.println(one);
            System.out.println(two);
            // 验证结果,两个对象的应用表示相同,验证成功。
            // 空间换时间。
        }
    }

    编程练习
    某公司研发星球维护系统,请使用饿汉式单例模式的实现思想,设计编写地球类。

    程序运行参考效果图如下:

    任务

    实现步骤:

    Earth类

      定义私有构造方法,并在构造方法中打印输出“地球诞生”

      结合饿汉模式,完成单例对象定义,实例化及静态方法设置

    测试类

      结合已有输出提示、运行效果图完成对象实例创建及对比(具体对象引用信息不限)

    public class Earth {
         //定义私有构造方法,并在构造方法中打印输出“地球诞生”
        
         //定义私有静态类对象并完成实例化
            
         //定义公有静态方法返回类内的私有静态对象
        
    }
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("第一个地球创建中。。。。");
            
            System.out.println("第二个地球创建中。。。。");
            
            System.out.println("第三个地球创建中。。。。");
            
            System.out.println("问:三个地球是同一个么?");
        }
    }

    懒汉式:

    /**
     * 懒汉式:类内实例对象创建时并不直接初始化,
     * 直到第一次调用get方法时,才完成初始化操作。
     */
    class SingletonTwo {
        // 1创建类中私有构造
        private SingletonTwo() {}// 外部不能创建该实例
    
        // 2创建该类型的私有静态实例
        private static SingletonTwo instance = null;
    
        // 3创建共有静态方法,提供实例对象。
        public static SingletonTwo getInstance() {
            if(instance == null)
                instance = new SingletonTwo();
            return instance;
        }
    
    }
    
    public class Re {
        public static void main(String[] args) {
            SingletonTwo one = SingletonTwo.getInstance();
            SingletonTwo two = SingletonTwo.getInstance();
    
            System.out.println(one);
            System.out.println(two);
            // 验证结果,两个对象的应用表示相同,验证成功。
            // 时间换空间。
        }
    }

    3-4 编程练习
    请使用懒汉式单例模式的实现思想,设计编写皇帝类。
    程序运行参考效果图如下:

    任务
    实现步骤:

    Emperor类
    1、定义私有构造方法
    2、结合懒汉模式,完成单例对象定义,实例化及静态方法设置

    测试类
    结合注释完成测试单例的皇帝类信息,程序效果参考运行效果图(具体对象引用信息不限)

    public class Emperor {
         //定义私有构造方法
    
         //定义私有静态类对象
    
         //定义公有静态方法返回类内的私有静态对象
            
    }
    
    public class Test {
    
        public static void main(String[] args) {
            System.out.println("创建1号皇帝对象");
            
            System.out.println("创建2号皇帝对象");
            
            System.out.println("创建3号皇帝对象");
            
            System.out.println("三个皇帝对象依次是:");
        }
    }

    -------------------

    饿汉式线程安全

    懒汉式存在线程风险

    1. 多选题
    下列关于懒汉式和饿汉式的说法错误的是(AB)(选择两项)
    A饿汉式在第一次使用时进行实例化
    B懒汉式在类加载时就创建实例
    C饿汉式的线程是安全的
    D懒汉式存在线程风险

  • 相关阅读:
    虚拟内存布局、内存的分工、堆与栈
    spring bean生命周期
    【iOS开发-29】解决方式:TabBar的图片不显示,仅仅显示灰色的正方形
    地图上显示div点位
    Android控件:RadioButton(单选button)
    innodb next-key lock解析
    AFNetworking2.0源代码解析
    python面向对象编程
    FlatBuffers与protobuf性能比較
    Android 混淆打包不混淆第三方jar包
  • 原文地址:https://www.cnblogs.com/haizinihao/p/14706415.html
Copyright © 2011-2022 走看看