本文地址:http://www.cnblogs.com/archimedes/p/java-singleton-pattern.html,转载请注明源地址。

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

概述

单例模式是关于怎样设计一个类,并使得该类只有一个实例的成熟模式,该模式的关键是将类的构造方法设置为private权限,并提供一个返回它的唯一实例的类方法。

适用性

1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

参与者

Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作。 可能负责创建它自己的唯一实例。

单例模式的结构与使用

模式的结构中只包括一个角色:

•单件类(Singleton)

模式的UML类图

实战部分

模式的结构的描述与使用

1.单例类(Singleton): Moon.java

public class Moon {private static Moon uniqueMoon;double radius;double distanceToEarth;private Moon() {uniqueMoon = this;radius = 1738;distanceToEarth = 363300;}public static synchronized Moon getMoon() {if(uniqueMoon == null) {uniqueMoon = new Moon();}return uniqueMoon;}public String show() {String s = "月亮的半径是" + radius + "km, 距地球是" + distanceToEarth + "km";return s;}
}

2.应用 Application.java

import javax.swing.*;
import java.awt.*;
public class Application {public static void main(String[] args) {MyFrame f1 = new MyFrame("张三看月亮");MyFrame f2 = new MyFrame("李四看月亮");f1.setBounds(10, 10, 360, 150);f2.setBounds(370, 10, 360, 150);f1.validate();f2.validate();}
}
class MyFrame extends JFrame {String str;MyFrame(String title) {setTitle(title);Moon moon = Moon.getMoon();str = moon.show();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);setVisible(true);repaint();}public void paint(Graphics g) {super.paint(g);g.setFont(new Font("宋体", Font.BOLD, 14));g.drawString(str, 5, 100);}
}

单例模式的优点

单件类的唯一实例由单件类本身来控制,所以可以很好地控制用户何时访问它。

您还可能感兴趣:

java设计模式系列:

java设计模式2--抽象工厂模式(Abstract Factory)

java设计模式1--工厂方法模式(Factory Method)

java设计模式0--设计模式简介

java设计模式3--单例模式(Singleton)相关推荐

  1. Java设计模式之单例模式(Singleton Pattern)

    **单例模式:用来创造独一无二的,只能有一个实例的对象设计模式.单例模式确保一个类只有一个实例,并提供一个全局访问点.**相比于全局变量(对对象的静态引用),单例模式可以延迟实例化,而且全局变量不能保 ...

  2. 设计模式之单例模式——Singleton

                        设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...

  3. Java设计模式之单例模式(七种写法)

    Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton {private static Singleton ...

  4. Java设计模式之单例模式的学习

    本篇是本人的第二篇博客 旨在记录本人对于Java设计模式之单例模式的学习和理解,也希望本篇可以对一些正在学习的小伙伴起到一些帮助 单例模式(singleton)的特点: 1.单例模式有且仅有一个实例: ...

  5. Java 设计模式之单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对 ...

  6. Java设计模式(二) -- 单例模式

    单例模式是Java中最广泛应用的设计模式之一,为创建对象提供了一种绝佳的方式.因此,在一些Java程序中, 一些管理器和控制器经常被设计为单例模式. 这种模式涉及到一个单一的类,该类负责创建自己的对象 ...

  7. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

  8. Java 设计模式(3)单例模式

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

  9. java设计模式之——单例模式(八种实现)

    一.介绍 有时,我们需要某个类的实例始终只有一个,举个例子,如果用面向对象语言写的操作系统,那么桌面这个实例肯定就只有一个,无论从哪个地方进入的桌面,都是同一个. 所谓类的单例设计模式,就是采取一定的 ...

  10. 设计模式之——单例模式(Singleton)的常见应用场景(转):

    单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...

最新文章

  1. 写 5 个你知道的 HTML5 标签,说明他们的意义
  2. pythonopencv算法_python opencv之分水岭算法示例
  3. 想服务器不宕机,你了解Linux“体检”指标吗?
  4. iOS 调用地图导航
  5. LINQ TO SQL (一):1. 对象关系设计器(O/R 设计器)
  6. QT5_PYQT导入自己的图片
  7. 2018前端学习总结
  8. java 手机信息管理系统照相功能_Android实现手机拍照功能
  9. java levenshtein算法_DNA分析 拼字检查 语音辨识 抄袭侦测 - Levenshtein算法
  10. 电商有可能决定一个工厂的生死存亡
  11. 网页版 Nginx 配置文件生成器发布,在线一健生成神器!不用愁了!
  12. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_8_Lambda省略格式Lambda使用前...
  13. Red Hat 第四季度总营收为8.79亿美元,低于预期
  14. js高级学习笔记(b站尚硅谷)-11-变量提升与函数提升
  15. svn各版本代码比较
  16. unityShader
  17. leetcode69. x 的平方根
  18. java外文书籍下载_Web开发经典技术图书(英文版居多),欢迎下载阅读 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  19. 文件查找工具locatfind
  20. MeshBaker插件 使用套路

热门文章

  1. 神经网络贷款风险评估(base on keras and python ) 原创 2017年08月18日 14:35:17 标签: python / 神经网络 / keras 300 用我
  2. 信用经济中的经济因素
  3. jvm性能调优实战 - 42JVM性能优化思路Review
  4. eclipse java8报错_eclipse4.3安装支持Java8插件,之后就报错无法打开eclipse,求解?
  5. java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
  6. asp.net httpclient post 请求头_Java11的HttpClient的使用
  7. 使用多线程一定提高效率吗?
  8. 计算机视觉——利用openCV与Socket结合进行远程摄像头实时视频传输并保存图片数据
  9. linux进程服务,Linux服务及进程
  10. vue中 .sync 修饰符 个人理解