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 (回收站)也是典型的单例应用。在整个系统运行过程
中,回收站一直维护着仅有的一个实例

posted @ 2020-09-04 09:13  Light光音  阅读(110)  评论(0编辑  收藏  举报