zoukankan      html  css  js  c++  java
  • day16 面向对象知识补充 单例设计模式 笔试会手写

    package com.atguigu.java2;
    /*
    * 单例设计模式:
    * 1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例
    *
    * 2. 如何实现?
    * 饿汉式 vs 懒汉式
    *
    * 3. 区分饿汉式 和 懒汉式
    * 饿汉式:
    * 坏处:对象加载时间过长。  占内存
    * 好处:饿汉式是线程安全的
    *
    * 懒汉式:好处:延迟对象的创建。
    * 目前的写法坏处:线程不安全。--->到多线程内容时,再修改
    *
    *
    */
    public class SingletonTest1 {
    public static void main(String[] args) {
    // Bank bank1 = new Bank();
    // Bank bank2 = new Bank();

    Bank bank1 = Bank.getInstance();
    Bank bank2 = Bank.getInstance();

    System.out.println(bank1 == bank2);       //true
    }
    }

    //饿汉式
    class Bank{
         //自己写属性
    //1.私有化类的构造器    为了避免在Bank类的外面直接调构造器
    private Bank(){

    }

    //2.内部创建类的对象
    //4.要求此对象也必须声明为静态的
    private static Bank instance = new Bank();          //此对象也能理解为Bank类的属性      静态方法中只能调静态结构。

    //3.提供公共的静态的方法,返回类的对象      加static就可以通过当前类来调用对象了???
    public static Bank getInstance(){
    return instance;
    }
    }



    * 单例模式的懒汉式实现(转到线程那里的内容!

    public class SingletonTest2 {
    public static void main(String[] args) {

    Order order1 = Order.getInstance();
    Order order2 = Order.getInstance();

    System.out.println(order1 == order2);

    }
    }


    class Order{

    //1.私有化类的构造器
    private Order(){

    }

    //2.声明当前类对象,没有初始化
    //4.此对象也必须声明为static的
    private static Order instance = null;

    //3.声明public、static的返回当前类对象的方法
    public static Order getInstance(){

    if(instance == null){

    instance = new Order();             //只new一次。

    }
    return instance;           //不是null则return
    }

    }

    使用场景:

    网站的计数器,一般也是单例模式实现,否则难以同步。
     应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志
    文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
     数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库
    资源。
     项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置
    文件数据,都生成一个对象去读取。
     Application 也是单例的典型应用
     Windows的Task Manager (任务管理器)就是很典型的单例模式
     Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程
    中,回收站一直维护着仅有的一个实例

  • 相关阅读:
    Qt5.9/C++项目开发架构理论
    Qt5及模块架构分析
    简单工厂模式实例
    SQL Server 存储过程通用分页
    面试问题
    ASP.Net 基础知识
    财务自由之路名句
    javascript 根据输入的关键词自动提示
    .NET批量更新
    在windows7上配置xampp虚拟主机
  • 原文地址:https://www.cnblogs.com/wangyanbin2333/p/13466257.html
Copyright © 2011-2022 走看看