确定唯一的对象 - 单例模式
原文链接:新增线程安全部分
一、GrilFriendClass 引言
有句话说什么样的年龄就该做什么样的事情,这句话放在当下还是很有道理的。可是 N 先生心中对成家立业是有自己的认识的,认为先立业而后成家,自己都没条件过平凡的日子怎么给另一半想要的生活呢。
但是由于家里催的紧,N 先生就想到了租女友先应付家里的姑姑阿姨们。
---
这年端午节,N 先生租安琪拉回家了,家里人都夸着说 N 的对象看着很乖巧,
我们都知道这里 N 的对象就是指的安琪拉。
同年中秋节,N 先生租孙尚香回家了,家里人都夸着说 N 的对象像个大小姐。
我们都知道这里 N 的对象就是指的孙尚香。
又到国庆节,N 先生租蔡文姬回家了,家里人都夸着说 N 的对象十分卡哇伊。
这一年来,家人没见到 N 先生时都会夸 N 的对象,但每次夸的对象都不一样,这里不是同一个对象。
二、GrilFriendSingleton 实例演示
2-1 GrilFriendUnSingleton 非单例模式实例
package pers.niaonao.entity; /** * @author niaonao * 非单例模式下的基本类 */
public class GrilFriendUnSingleton { //默认的构造方法 public GrilFriendUnSingleton() { } private String info = "我是你的新 GrilFriend"; /** * 获取对象信息的方法 * @return */ public String getGrilFriend() { return info; }
}
复制代码
通过新建该类的实体对象来调用相关方法
package pers.niaonao.test; import pers.niaonao.entity.GrilFriendUnSingleton; /** * @author niaonao * */
public class TestGrilFriend { public static void main(String[] args) { //对实体类创建两个对象 GrilFriendUnSingleton n_first_grilfriend = new GrilFriendUnSingleton(); GrilFriendUnSingleton n_next_grilfriend = new GrilFriendUnSingleton(); String info = "n_first_grilfriend 和 n_next_grilfriend"; //判断对象是否是同一个实例 if (n_first_grilfriend != n_next_grilfriend) { info += "\n\t不是同一个实例,是两个不同的对象:" + "\n\t魔法为我而存在," + n_first_grilfriend.getGrilFriend() + "\n\t大小姐驾到," + n_next_grilfriend.getGrilFriend(); } else { info += "\n\t是同一个实例,同一个对象:" + "\n\t会用不知火流的烈焰烧死你的呦," + n_first_grilfriend.getGrilFriend() + "\n\t会用不知火流的烈焰烧死你的呦," + n_next_grilfriend.getGrilFriend(); } System.out.println(info); }
}
复制代码
2-2 GrilFriendBySingleton 单例模式实例
package pers.niaonao.entity; /** * @author niaonao * 单例模式下的基本类 */
public class GrilFriendBySingleton { //初始化静态私有变量grilfriend private static GrilFriendBySingleton grilfriend = null; /** * 构造单例模式基本方法getInstance() * 调用该方法,会先判断对象grilfriend是否不为null,即对象是否已存在, * 若实例对象已存在则不再创建新对象,否则创建一个新对象给变量grilfriend。 * * 保证当前类只存在一个实体对象。即单例模式 * @return grilfriend */ public static GrilFriendBySingleton getInstance() { if (null == grilfriend) grilfriend = new GrilFriendBySingleton(); return grilfriend; } //默认的构造方法 public GrilFriendBySingleton() { } private String info = "我是你的新 GrilFriend"; /** * 获取对象信息的方法 * @return */ public String getGrilFriend() { return info; }
}
复制代码
测试类 TestGrilFriend 来测试单例模式
package pers.niaonao.test; import pers.niaonao.entity.GrilFriendBySingleton; /** * @author niaonao * */
public class TestGrilFriend { public static void main(String[] args) { //通过单例模式创建出两个实体常量 GrilFriendBySingleton n_first_grilfriend = GrilFriendBySingleton.getInstance(); GrilFriendBySingleton n_next_grilfriend = GrilFriendBySingleton.getInstance(); String info = "n_first_grilfriend 和 n_next_grilfriend"; //判断对象是否是同一个实例 if (n_first_grilfriend != n_next_grilfriend) { info += "\n\t不是同一个实例,是两个不同的对象:" + "\n\t魔法为我而存在," + n_first_grilfriend.getGrilFriend() + "\n\t大小姐驾到," + n_next_grilfriend.getGrilFriend(); } else { info += "\n\t是同一个实例,同一个对象:" + "\n\t会用不知火流的烈焰烧死你的呦," + n_first_grilfriend.getGrilFriend() + "\n\t会用不知火流的烈焰烧死你的呦," + n_next_grilfriend.getGrilFriend(); } System.out.println(info); }
}
复制代码
三、Singleton Pattern 单例模式
3-1 定义
3-2 类图
3-3 三要素
- 必须保证一个类只能有一个实例
- 必须是这个类自行创建这个实例
- 必须自行向整个系统提供这实例
3-4.优缺点
- 优点
客户端使用单例模式类的实例,只需要调用一个单一的方法即可生成唯一的实例,节约了资源。
- 缺点
单例模式难以实现序列化 Serialization,所以采用单例模式的类很难被持久化,也不易通过网络传输,一般网络传输数据都会序列化对象相关的类。单例模式采用静态方法 static,不支持面向对象的三大特性之一的继承,无法再继承结构extend 中使用。如果分布式集群的环境下存在多个 Java 虚拟机,不易确定具体的哪个单例在运行。
3-5 应用场景
3-6 说明
3-7 标准单例代码演示
public class Singleton { private static Singleton uniqueInstance = null; private Singleton() { // Exists only to defeat instantiation. } public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } // Other methods...
}
复制代码
END
确定唯一的对象 - 单例模式相关推荐
- 并发编程-09安全发布对象+单例模式详解
文章目录 脑图 概述 安全发布对象的4种方式 示例 懒汉模式(线程不安全) 饿汉模式 静态域(线程安全) 改造线程不安全的懒汉模式方式一 静态方法使用synchronized修饰 (线程安全) 改造线 ...
- winform窗体对象 单例模式与泛型结合
实现弹出窗体对象的单例模式 结合泛型后,可以用于所有窗体的弹出操作 public class BaseFrm<T> where T : Form, new(){//定义一个静态的,私有的 ...
- 我年薪60W,浑身没有超过100块的衣服:存钱,才是最顶级的自律
黑客技术 点击右侧关注,了解黑客的世界! Java开发进阶 点击右侧关注,掌握进阶之路! Python开发 点击右侧关注,探讨技术话题! 作者 | 阿秀 来源 | 进击的阿秀(zchxuexi) 当代 ...
- 趣谈设计模式 | 单例模式(Singleton) :独一无二的对象
文章目录 单例模式 饿汉模式 懒汉模式 懒汉和饿汉的区别 单例模式 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全 局访问点,该实例被所有程序模块共享. ...
- 确保对象的唯一性——单例模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/7420883 3.1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例.举 ...
- python创建模式对象_【python设计模式-创建型】单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对 ...
- Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细
目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...
- 设计模式-单例模式(唯一的月亮实例附代码)
单例模式简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负 ...
- 【C++】C/C++ 中的单例模式
目录 part 0:单例模式3种经典的实现方式 Meyer's Singleton Meyers Singleton版本二 Lazy Singleton Eager Singleton Testing ...
最新文章
- 在Android使用新浪微博的开发平台API
- php jq异步上传图片,Jquery实现异步上传图片
- vue项目中主要文件的加载顺序(index.html、App.vue、main.js)
- 服务总线yali测试_服务器的压力测试方法与流程
- 图像处理(1)----入门教程
- JavaScript学习(二十五)—实现无缝滚动
- 四种电荷分布,点电荷,体电荷,面电荷,线电荷
- 学校家教服务管理系统
- 良心安利建筑行业3d打印模型素材网站
- 用ADB操纵手机实现连点器(折衷案)
- 哲学家就餐问题及其实现
- ARM架构下常用GNU汇编程序伪指令介绍(Assembler Directive)
- 南阳oj 58 bfs入门
- 关于利用51单片机实现篮球记分牌功能的概述
- 天津工业大学计算机学院调剂信息,天津工业大学2019年硕士研究生调剂公告
- [Constraints 18-5210] No constraints selected for write.
- 如何解决MacBook休眠时耗电过大的问题
- 如何选择北京市医疗定点机构---初级班
- 小程序如何实现下拉选项操作
- Python|图片转二维码