打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java基础之:单例模式

设计模式

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

单例模式

对于一个类而言,外部只能获取其一个实例。

实现步骤:

1) 构造器私有化

2) 类的内部创建对象

3) 向外暴露一个静态的公共方法。getDog,getCat。

简单案例

package codeBlock;public class Singleton {    public static void main(String[] args) {                Dog dog1 = Dog.getDog();        Dog dog2 = Dog.getDog();        System.out.println(dog1.getName()); //旺财        System.out.println(dog2.getName()); //旺财        System.out.println(dog2 == dog1);   //true                        Cat cat1 = Cat.getCat();        Cat cat2 = Cat.getCat();        System.out.println(cat1.getName());  //布偶        System.out.println(cat2.getName());  //布偶        System.out.println(cat2 == cat1);  //true    }}//饿汉模式:声明一个对象,将其初始化并作为一个静态属性,在外部需要此类对象时,直接返回此对象。class Dog{    private String name;    private static Dog dog = new Dog("旺财");  //静态属性,所以只有一个dog        private Dog(String name) {        this.name = name;    }        public static Dog getDog() {        return dog;    }        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    }//懒汉模式:声明一个对象,并作为一个静态属性,在外部需要此类对象时将其初始化,再返回此对象。class Cat{    private String name;    private static Cat cat ;    //静态属性,所以只有一个cat        private Cat(String name) {        this.name = name;    }        public static Cat getCat() {        if(cat == null) {            cat = new Cat("布偶");        }        return cat;    }        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    }

饿汉模式与懒汉模式

  1. 二者最不同的点在于对象声明的时机。饿汉模式是在类加载时,就声明并初始化一个对象作为静态变量,而懒汉模式是在类加载时声明一个静态属性,在外部需要实例时再创建对象。

  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。

  3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。

  4. java.lang.Runtime就是经典的单例模式。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单例设计模式
Class类 和 class对象(运行时的类型信息)
02-Scala3_匹配模式和样例类、注解、类型参数、高级类型、隐式转换
单例模式
面试高频-吃透单例设计模式
在java switch中使用String作为分支条件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服