本文主要讲述java的饿汉和懒汉设计模式

饿汉和懒汉设计模式的目的:使得该类的对象,只能有一个,不允许其他类,创建该类的对象。

  • 饿汉设计模式

  示例代码如下:

 1 public class HungerModel {
2 public static void main(String[] args) {
3 // GirlFriend girlFriend1 = new GirlFriend("white", 34);
4 // GirlFriend girlFriend2 = new GirlFriend("jack", 20);
5 // System.out.println(girlFriend1);
6 // System.out.println(girlFriend2);
7 GirlFriend girlFriend1 = GirlFriend.getInstance();
8 System.out.println(girlFriend1);
9
10 GirlFriend girlFriend2 = GirlFriend.getInstance();
11 System.out.println(girlFriend2);
12
13 System.out.println(girlFriend1 == girlFriend2);
14
15 }
16
17 }
18
19 // 只能有一个女朋友,即只能创建一个girlfriend对象?
20
21 class GirlFriend {
22 private String name;
23 private int age;
24 private static GirlFriend girl = new GirlFriend("布尔玛",20);
25
26 /**
27 * (1) 将构造器私有化,不允许其他类调用该构造器
28 * (2) 类中创建该对象实例,私有化,设置为静态,使用无需创建对象,直接用类.静态变量访问.
29 * (3) 提供static公共方法,返回实例对象
30 * @param name
31 * @param age
32 */
33
34 public static GirlFriend getInstance(){
35 return girl;
36 }
37
38 private GirlFriend(String name, int age) {
39 this.name = name;
40 this.age = age;
41 }
42
43 @Override
44 public String toString() {
45 return "GirlFriend{" +
46 "name='" + name + '\'' +
47 ", age=" + age +
48 '}';
49 }
50 }

  运行结果如下:

  • 懒汉设计模式

  示例代码如下:

public class LazyModel {
public static void main(String[] args) {
GirlFriend_ girlFriend1 = GirlFriend_.getInstance();
System.out.println(girlFriend1); GirlFriend_ girlFriend2 = GirlFriend_.getInstance();
System.out.println(girlFriend2); System.out.println(girlFriend1 == girlFriend2);
}
}
class GirlFriend_ {
private String name;
private int age;
private static GirlFriend_ girlFriend ; // 默认初始值为null /**
* (1) 构造器私有化
* (2) 类成员中添加对象引用,static ,private,不要直接new,
* (3) 提供公共方法,返回对象实例 ,public,判断当前对象是否为空,
* 若为空,则创建,若不为空,直接返回该对象。
* @param name
* @param age
*/ private GirlFriend_(String name, int age) {
this.name = name;
this.age = age;
} public static GirlFriend_ getInstance(){
if(girlFriend == null){
girlFriend = new GirlFriend_("布尔玛",20);
}
return girlFriend;
} @Override
public String toString() {
return "GirlFriend_{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

  运行结果如下:

饿汉和懒汉模式的区别:

  饿汉模式,由于直接在类静态成员变量初始化时,创建该类的对象,导致该类对象随着类的存在,一直存在,有可能该对象一直得不到使用,因此饥饿,造成资源浪费;

  示例代码如下:

public class HungerModel {
public static void main(String[] args) {
System.out.println(GirlFriend.id); } } // 只能有一个女朋友,即只能创建一个girlfriend对象? class GirlFriend {
private String name;
private int age;
public static int id = 1001;
private static GirlFriend girl = new GirlFriend("布尔玛",20); /**
* (1) 将构造器私有化,不允许其他类调用该构造器
* (2) 类中创建该对象实例,私有化,设置为静态,使用无需创建对象,直接用类.静态变量访问.
* (3) 提供static公共方法,返回实例对象
* @param name
* @param age
*/ public static GirlFriend getInstance(){
return girl;
} private GirlFriend(String name, int age) {
this.name = name;
this.age = age;
System.out.println("GirlFriend类的private GirlFriend(String name, int age)构造器被调用");
} @Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

  运行结果如下:

由此看出,没有使用该对象,但是该对象仍然被创建,浪费资源。

  懒汉模式,先声明静态变量【对象的引用】,在公共方法【返回对象】时,判断当前对象是否为空,若为空,则创建该对象,返回对象实例,这样,当调用该对象时,才会创建对象,不会造成资源浪费。

  示例代码如下:

 1 public class LazyModel {
2 public static void main(String[] args) {
3 System.out.println(GirlFriend_.id);
4 System.out.println(GirlFriend_.getInstance());
5 }
6 }
7 class GirlFriend_ {
8 private String name;
9 private int age;
10 public static int id = 1002;
11 private static GirlFriend_ girlFriend ; // 默认初始值为null
12
13 /**
14 * (1) 构造器私有化
15 * (2) 类成员中添加对象引用,static ,private,不要直接new,
16 * (3) 提供公共方法,返回对象实例 ,public,判断当前对象是否为空,
17 * 若为空,则创建,若不为空,直接返回该对象。
18 * @param name
19 * @param age
20 */
21
22 private GirlFriend_(String name, int age) {
23 this.name = name;
24 this.age = age;
25 System.out.println("GirlFriend_类的private GirlFriend_(String name, int age)构造器被调用");
26 }
27
28 public static GirlFriend_ getInstance(){
29 if(girlFriend == null){
30 girlFriend = new GirlFriend_("布尔玛",20);
31 }
32 return girlFriend;
33 }
34
35 @Override
36 public String toString() {
37 return "GirlFriend_{" +
38 "name='" + name + '\'' +
39 ", age=" + age +
40 '}';
41 }
42 }

  运行结果如下:

java的饿汉和懒汉设计模式的更多相关文章

  1. 瞎扯设计模式1:单例模式 饿汉模式 懒汉模式 线程安全的单例 singleton 设计模式 java

    [原创声明]此文为本人原创,欢迎转载,转载请注明出处,作者链接~ http://www.cnblogs.com/m-yb/p/8833085.html 单例很常用,面试也经常被问,如:不用自定义锁怎么 ...

  2. java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern

    https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之   ...

  3. Java单例模式的各种实现(饿汉、懒汉、静态内部类、static代码块、enum枚举类型)

    饿汉模式 饿汉模式就是立即加载,在方法调用前,实例就已经被创建了,所以是线程安全的. public class MyObject1 { private static MyObject1 myObjec ...

  4. Spring中单例模式中的饿汉和懒汉以及Spring中的多例模式

    链接:https://pan.baidu.com/s/1wgxnXnGbPdK1YaZvhO7PDQ 提取码:opjr 单例模式:每个bean定义只生成一个对象实例,每次getBean请求获得的都是此 ...

  5. Java设计模式 - 单例模式 (懒汉方式和饿汉方式)

    概念: Java中单例模式是一种常见的设计模式,单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的写法有好几种,这 ...

  6. Java中单例设计模式,饿汉式和懒汉式

    Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯 ...

  7. C++的单例模式与线程安全单例模式(懒汉/饿汉)

    1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实 ...

  8. Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别

    Java的单例模式——饿汉式 package com.swift; //Java单例设计模式——恶汉式 public class SinglePerson { private String name= ...

  9. Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式

    (一)java.util.Date类 1.该类有一个long类型的属性:用来存放时间,是用毫秒数的形式表示,开始的日期是从1970年1月1号 00:00:00.    2.该类的很多方法都已经过时,不 ...

  10. java设计模式单例模式 ----懒汉式与饿汉式的区别

    常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...

随机推荐

  1. 研发效能之技术治理&技术治理架构师

    最近很多公司专门设置了一个职位叫「技术治理架构师」,主要负责公司技术治理相关事宜.这是个非常有意思的职位.技术治理的活,之前我们也是做的,只是没有提的这么明确,一般都是研发效能团队.PMO.架构团队. ...

  2. WPF开发经验-实现Win10虚拟触摸键盘

    一 引入 项目有个需求,需要实现纯触控操作进行键盘输入.项目部署在Win10系统上,考虑有两种方案来实现. 通过调用Win10自带的触摸键盘来实现: 通过WPF实现一个触摸键盘来实现: 二 调用Win ...

  3. 关于aws账单数据中几个重要的与费用相关的字段的意义分析

    今天在看aws账号的详细信息时,看到字段很多,大多数字段,根据名称可以知道代表的意义 对于如下几个字段的概念有点模糊(位于"UsageStartDate","UsageE ...

  4. python锦鲤

    今日内容目录 垃圾回收机制 流程控制理论& 流程控制之分支结构& 流程控制之循环结果& 详情 Python垃圾回收机制 """ 有一些语言,内存空 ...

  5. TomCat之负载均衡

    TomCat之负载均衡 本文讲述了tomcat当nginx负载均衡服务器配置步骤 以下是Tomcat负载均衡配置信息 1.修改nginx的nginx.conf文件 添加如下属性:localhost是名 ...

  6. 构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)

    1.构建SpringBoot项目 大致流程 1.新建工程 2.选择环境配置.jdk版本 3.选择 依赖(可省略.后续要手动在pom文件写) 4.项目名 1.1 图解建立过程 1.2 项目结构 友情提示 ...

  7. 那齐博x3又什么什么?

    那齐博x3又什么什么? 齐博x3是齐博X1/齐博x2之后的升级版本. 主要优化圈子系统

  8. 齐博x1会员中心菜单权限显示

    会员中心的菜单可以通过后台设置用户组权限进行显示或者是隐藏.比如商城里的菜单如下: 菜单文件是:\application\shop\member_menu.php return array( 'cms ...

  9. python同时识别多张人脸(运用face_recognition)

    之前发的博客和网上流传的代码严格来说都只算得上是人脸检测,不能区别人脸,今天来说说真的人脸识别 篇幅所限,就举两张人脸的例子了,本程序需要安装face_recognition 下面是全部源代码: im ...

  10. 1.轮询、长轮询、websocket简介

    一.轮询 前端每隔固定时间向后台发送一次请求,询问服务器是否有新数据   缺点: 延迟,需要固定的轮询时间,不一定是实时数据 大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候 并没有新的数 ...