软件设计模式--第二章 创建型模式-- 单例模式
目录
- 第二章 创建型模式
- 1、创建型模式概述
- 2、单例模式(Singleton)
- (1)模式的定义与特点
- (2)模式的结构与实现
- (3)应用场景
- (4)扩展
第二章 创建型模式
1、创建型模式概述
主要特点
将对象的创建与使用分离”,这样可以降低系统的耦合度。创建型模式分为以下几种:
⑴单例(Singleton)模式 :某个类只能生成一个实例,该类提供了一个全 局访问点供外部获取该实例,其拓展是有限多例模式。
⑵ 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克 隆出多个和原型类似的新实例。
⑶ 工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子 类决定生产什么产品。
⑷ 抽象工厂(Abstract Factory)模式:提供一个创建产品族的接口,其每 个子类可以生产一系列相关的产品。
⑸ 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分, 然后根据不同需要分别创建它们,最后构建成该复杂对象。
2、单例模式(Singleton)
(1)模式的定义与特点
定义:指一个类只有一个实例,且该类能自行创建这个实例的一 种模式。例如,Windows中的任务管理器、回收站等
特点:
1)单例类只有一个实例对象;
2)该单例对象必须由单例 类自行创建;
3)单例类对外提供一个访问该单例的全局访问点。
(2)模式的结构与实现
普通类的构造函数是公有的, 外部类可以通过“new 构造函数 ()”来生成多个实例。
但是如果将类的构造函数设为私有的, 外部类就无法调用它生成多个实例了。
这时该类自身必须定义一 个静态私有实例,并向外提供一 个静态的公有函数用于创建或获取该静态私有实例。
1、结构
- 单例类:包含一个实例且能自行创建这个实例的类。
- 访问者类:使用单例的类
2、实现
- 懒汉式单例:该模式的特点是类加载时没有生成单例,只有当第一次调用getInstance方法时才去创建这个单例
结构图:
代码如下:
public class LazySingleton {private static volatile LazySingleton instance = null;//保证instance 在所有线程中同步private LazySingleton() {} //private避免类在外部被实例化public static synchronized LazySingleton getInstance() {//getInstance方法前加同步if (instance == null) {instance = new LazySingleton();}return instance;}}
例: 用懒汉式单例模式模拟产生美国当今总统对象。
代码:
测试类:
public class SingletonLazy {public static void main(String[] args) {President zt1 = President.getInstance();zt1.getName();// 输出总统的名字President zt2 = President.getInstance();zt2.getName();// 输出总统的名字if (zt1 == zt2) {System.out.println("他们是同一人!");}else {System.out.println("他们不是同一人!");} }
}
President类:
class President{//保证instance在所有线程中同步private static volatile President instance=null;//private避免类在外部被实例化private President(){ System.out.println("产生一个总统!"); }//在getInstance方法上加同步public static synchronized President getInstance(){ if(instance==null){instance=new President();}else {System.out.println("已经有一个总统,不能产生新总统!");} return instance;}public void getName() {System.out.println("我是美国总统:特朗普。");}
}
- 饿汉式单例:该模式的特点是类一旦加载就创建一个单例,保证在调用getInstance方法之前单例已经存在了。
代码如下:
public class HungrySingleton {//类加载时候创建实例private static final HungrySingleton instance = newHungrySingleton();private HungrySingleton() {}public static HungrySingleton getInstance() {return instance;}
}
例:用饿汉式单 例模式模拟产生猪八戒对象。
结构图:
代码如下:
测试类:
public class SingletonEager {public static void main(String[] args) {JFrame jf = new JFrame("饿汉单例模式测试");jf.setLayout(new GridLayout(1, 2));Container contentPane = jf.getContentPane();Bajie obj1 = Bajie.getInstance();contentPane.add(obj1);Bajie obj2 = Bajie.getInstance();contentPane.add(obj2);if (obj1 == obj2) {System.out.println("他们是同一人!");} else {System.out.println("他们不是同一人!");}jf.pack();jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}
Bajie 类:
class Bajie extends JPanel {//类加载时创建private static Bajie instance = new Bajie();private Bajie() {JLabel l1 = new JLabel(new ImageIcon("src/chapter02/singleton/Bajie.jpg"));this.add(l1);}public static Bajie getInstance() {return instance;}
}
(3)应用场景
- 某类只要求生成一个对象的时候。如:一个班中的班长
- 当对象需要被共享的场合。如:WEB中的配置对象、数据库连接池。
- 当某类需要频繁实例化,而创建对的对象又频繁被销毁的时候。如:多线程的线程池、网络连接池。
(4)扩展
例模式可扩展为有限的多例(Multiton)模式,这种模式可生成有限个实例并保存在ArrayList中,客户需要时可随机获取,通俗的说就是,创建多个单例对象,存入list中,需要的时候去取。
软件设计模式--第二章 创建型模式-- 单例模式相关推荐
- 软件设计模式--第二章 创建型模式--建造者模式
目录 第二章 创建型模式 1.创建型模式概述 2.建造者模式 (1)模式的定义与特点 (2)模式的结构与实现 (3)应用场景 (4)扩展 第二章 创建型模式 1.创建型模式概述 主要特点 将对象的创建 ...
- 大话设计模式之爱你一万年:第二章 创建型模式:单例模式:我的女朋友只有你一个:2.单例模式的实现-懒汉模式
2.单例模式的实现-懒汉模式 视频学习地址 -- <大话设计模式之爱你一万年>:https://dwz.cn/wqO0MAy7 这一节我们先来看看一种实现模式,懒汉模式,这也是这么中实现 ...
- 大话设计模式之爱你一万年:第二章 创建型模式:单例模式:我的女朋友只有你一个:1.单例模式的基本概念
1.单例模式的基本概念 我的女朋友总是你喜欢问:我在你心中是不是唯一的存在? 我:在我心里你就是独立无二的,谁都不能替代. 女朋友:那你证明一下. 我:Talk is cheap
- 设计模式01 UML图,软件设计原则,创建型模式
概述 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1995年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 Joh ...
- Java设计模式之五大创建型模式
Java设计模式之五大创建型模式 设计模式(23种) 单例模式(Singleton Pattern) 参考链接 概念 使用场景 实现思路 实现方式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线 ...
- 【设计模式·Python】创建型模式
设计模式中,创建型模式主要由以下几种: 工厂方法模式 抽象工厂模式 建造者模式 原型模式 单例模式 简单工厂模式 不直接向客户暴露对象的实现细节,而是通过一个工厂类来负责创建产品的实例. 角色: 工厂 ...
- 《设计模式:可复用面向对象软件的基础》——创建型模式(2)(笔记)
文章目录 三.创建型模式 3.4 PROTOTYPE(原型) 1.意图 补充部分 2.动机 3.适用性 4.结构 5.参与者 6.协作 7.效果 8 实现 9.代码示例 10.相关模式 3.5 SIN ...
- 设计模式之六个创建型模式的相关知识,简单易懂。
一. 简单工厂模式-Simple Factory Pattern 1) 工厂三兄弟之简单工厂模式(一) 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高 ...
- Java设计模式之五大创建型模式(附实例和详解)
一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...
最新文章
- LSTM内部实现原理详解
- sony service tel
- 致创业者:APP已死 服务永生
- micopython 18b20_micropython typboaed v202连接DS18B20测温小实验
- 阿里巴巴发布智能运维故障管理AI+生态计划
- [vue] 说说你对v-clock和v-pre指令的理解
- LeetCode算法入门- Longest Substring Without Repeating Characters-day4
- 运维笔记 - Nginx
- devops与itsm集成_如何解决DevOps与ITSM文化冲突
- 都说快递鸟接口好,对接快,可是为什么我搞了几个小时还没有搞完
- 【WPF】绑定Hyperlink超链接
- oracle索引大小暴增_oracle海量数据中提升创建索引的速度
- 如何用20%精力搞定80%任务
- C语言存储误差,C语言实现测量数据误差处理
- Java解压ZIP、RAR文件
- 【机器学习】层次聚类-Agglomerative clustering
- javascript中对this的理解
- 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码
- Win 10关机后电源灯不停闪烁的解决办法
- Ubuntu鼠标一直闪烁,win10鼠标正常