本文地址: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

    用来创建独一无二的,是能有一个实例的对象的入场券.告诉你一个好消息,单例模式的类图可以说是所有模式的类图中最简单的,事实上,它的类图上只有一个类!但是,可不要兴奋过头,尽管从类设计的视角来说很简单,但 ...

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

    static 的应用 单例模式 Singleton 单例:保证一个类在系统中最多只创建一个实例. 好处:由于过多创建对象实例,会产生过多的系统垃圾,需要GC频繁回收,由于GC会占用较大的系统资源,所有 ...

  3. Java 设计模式(三)-单例模式(Singleton Pattern)

    1     概念定义 1.1   定义 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 1.2   类型 创建类模式 1.3   难点 1)多个虚拟机 当系统中的单例类被拷贝运行在多 ...

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

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

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

    -------Success is getting what you want, happiness is wanting what you get. java设计模式之单例模式(Singleton) ...

  6. 设计模式(4) -- 单例模式(Singleton)

    设计模式(4)  -- 单例模式(Singleton) 试想一个读取配置文件的需求,创建完读取类后通过New一个类的实例来读取配置文件的内容,在系统运行期间,系统中会存在很多个该类的实例对象,也就是说 ...

  7. 折腾Java设计模式之单例模式

    博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...

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

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

  9. Java 设计模式之单例模式(一)

    原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...

  10. java设计模式之单例模式你真的会了吗?(懒汉式篇)

    java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...

随机推荐

  1. cvc-complex-type.2.4.d: 发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。

      Eclipse上开发Android的时候,新建的项目提示: [2016-01-13 14:07:56 - android SDK] Error when loading the SDK: Erro ...

  2. Django学习笔记-2018.11.16

    知识储备: 1 Python基础 2 数据库SQL 3 HTTP协议 4 HTML&&CSS 5 正则表达式 Django启动 django-admin startproject pr ...

  3. windows关闭aslr办法

    关闭aslr方便调试分析. 转:https://www.52pojie.cn/thread-377450-1-1.html windows关闭aslr办法 如 @Hmily  前辈所说, Window ...

  4. Python函数系列-迭代器,生成器

    一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...

  5. FastReport.Net使用:[18]形状(Shape)控件用法

    FastReport中,如果要画一张漂亮的报表,经常会画些形状控件来美化?那么如何用好形状(Shape)控件呢? 形状的5种类型 在工具栏的图形控件下拉菜单中有5种类型(矩形.圆角矩形.椭圆形.三角形 ...

  6. PHP -- 页面传值的6种获取方法

    1.PHP4以后获取传值的方法 一般在页面中传值常见的是POST.GET和COOKIE几种,所以下面我也主要介绍这几种.PHP4以后都采用的是$_POST.$_GET等数组来获取网页传值.在PHP3. ...

  7. Google Code Jam 2009 Qualification Round Problem A. Alien Language

    https://code.google.com/codejam/contest/90101/dashboard#s=p0 Problem After years of study, scientist ...

  8. Linux知识(6)----VIM

    vi的第一版是由Bill Joy在1978年写成的,当时他是UC Berkeley的学生.后来他共同创建了神奇的Sun公司.vi来源于visual一词,目标是在终端上可视化地模拟文本的编辑,是的更人性 ...

  9. win2003服务器装spl2008,打安全补丁后无法进入SQL Server Management Studio

    解决方法就是:卸载垃圾的360安全卫士,用windows自带的更新工具更新系统补丁,就好了

  10. C# 7.0中可能出现的语法

    今天在MSDN上看到的微软关于微软关于C# 7.0特性的Work List,主要特性如下: Tuple增强 Tuple的可读性一直不是很好, 很多时候宁愿新写一个类也不使用Item1, Item2这种 ...