目录

  • 第二章 创建型模式
    • 1、创建型模式概述
    • 2、单例模式(Singleton)
      • (1)模式的定义与特点
      • (2)模式的结构与实现
      • (3)应用场景
      • (4)扩展

第二章 创建型模式

1、创建型模式概述

  • 主要特点
    对象的创建与使用分离”,这样可以降低系统的耦合度。

  • 创建型模式分为以下几种:
    ⑴单例(Singleton)模式 :某个类只能生成一个实例,该类提供了一个全 局访问点供外部获取该实例,其拓展是有限多例模式。
    ⑵ 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克 隆出多个和原型类似的新实例。
    ⑶ 工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子 类决定生产什么产品。
    ⑷ 抽象工厂(Abstract Factory)模式:提供一个创建产品族的接口,其每 个子类可以生产一系列相关的产品。
    ⑸ 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分, 然后根据不同需要分别创建它们,最后构建成该复杂对象。

2、单例模式(Singleton)

(1)模式的定义与特点

  1. 定义:指一个类只有一个实例,且该类能自行创建这个实例的一 种模式。例如,Windows中的任务管理器、回收站等

  2. 特点:
    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. 软件设计模式--第二章 创建型模式--建造者模式

    目录 第二章 创建型模式 1.创建型模式概述 2.建造者模式 (1)模式的定义与特点 (2)模式的结构与实现 (3)应用场景 (4)扩展 第二章 创建型模式 1.创建型模式概述 主要特点 将对象的创建 ...

  2. 大话设计模式之爱你一万年:第二章 创建型模式:单例模式:我的女朋友只有你一个:2.单例模式的实现-懒汉模式

    2.单例模式的实现-懒汉模式 视频学习地址  -- <大话设计模式之爱你一万年>:https://dwz.cn/wqO0MAy7 这一节我们先来看看一种实现模式,懒汉模式,这也是这么中实现 ...

  3. 大话设计模式之爱你一万年:第二章 创建型模式:单例模式:我的女朋友只有你一个:1.单例模式的基本概念

    1.单例模式的基本概念 我的女朋友总是你喜欢问:我在你心中是不是唯一的存在? 我:在我心里你就是独立无二的,谁都不能替代. 女朋友:那你证明一下. 我:Talk is cheap

  4. 设计模式01 UML图,软件设计原则,创建型模式

    概述 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1995年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 Joh ...

  5. Java设计模式之五大创建型模式

    Java设计模式之五大创建型模式 设计模式(23种) 单例模式(Singleton Pattern) 参考链接 概念 使用场景 实现思路 实现方式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线 ...

  6. 【设计模式·Python】创建型模式

    设计模式中,创建型模式主要由以下几种: 工厂方法模式 抽象工厂模式 建造者模式 原型模式 单例模式 简单工厂模式 不直接向客户暴露对象的实现细节,而是通过一个工厂类来负责创建产品的实例. 角色: 工厂 ...

  7. 《设计模式:可复用面向对象软件的基础》——创建型模式(2)(笔记)

    文章目录 三.创建型模式 3.4 PROTOTYPE(原型) 1.意图 补充部分 2.动机 3.适用性 4.结构 5.参与者 6.协作 7.效果 8 实现 9.代码示例 10.相关模式 3.5 SIN ...

  8. 设计模式之六个创建型模式的相关知识,简单易懂。

    一. 简单工厂模式-Simple Factory Pattern 1) 工厂三兄弟之简单工厂模式(一) 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高 ...

  9. Java设计模式之五大创建型模式(附实例和详解)

    一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...

最新文章

  1. LSTM内部实现原理详解
  2. sony service tel
  3. 致创业者:APP已死 服务永生
  4. micopython 18b20_micropython typboaed v202连接DS18B20测温小实验
  5. 阿里巴巴发布智能运维故障管理AI+生态计划
  6. [vue] 说说你对v-clock和v-pre指令的理解
  7. LeetCode算法入门- Longest Substring Without Repeating Characters-day4
  8. 运维笔记 - Nginx
  9. devops与itsm集成_如何解决DevOps与ITSM文化冲突
  10. 都说快递鸟接口好,对接快,可是为什么我搞了几个小时还没有搞完
  11. 【WPF】绑定Hyperlink超链接
  12. oracle索引大小暴增_oracle海量数据中提升创建索引的速度
  13. 如何用20%精力搞定80%任务
  14. C语言存储误差,C语言实现测量数据误差处理
  15. Java解压ZIP、RAR文件
  16. 【机器学习】层次聚类-Agglomerative clustering
  17. javascript中对this的理解
  18. 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码
  19. Win 10关机后电源灯不停闪烁的解决办法
  20. Ubuntu鼠标一直闪烁,win10鼠标正常

热门文章

  1. 推荐系统之DeepWalk
  2. 论文发表在计算机系统应用,团队成员唐秀雯同学在《计算机系统应用》发表学术论文...
  3. nft游戏开发,nft游戏开发平台
  4. 金庸的武侠世界——小说人物分析
  5. 拿来即用的前端登录页面(简洁清爽版)
  6. 手机上怎么设置备忘录提醒,支持设定备忘录提醒的软件
  7. CAN总线芯片SN65HVD230QD介绍
  8. eggjs使用egg-mongoose操作MongoDB数据库
  9. GIS开发:超图的webgl示例
  10. NVIDIA Optimus技术和CUDA