注:该笔记整理自清华大学耿祥义教授的java模式课件
单件模式
保证一个类仅有一个实例,并提供一个访问它的的全局访问点。
PrototypePattern
Ensure a class only has one instance, andprovide a global point of access to it.
一.概述
单件模式是关于怎样设计一个类,并使得该类只有一个实例的成熟模式,该模式的关键是将类的构造方法设置为private权限,并提供一个返回它的唯一实例的类方法。
二.单件模式的结构
1. 模式的结构中只包括一个角色:
单件类(Singleton)2. 模式的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);
}
}
结果:
四.单件模式的优点
单件类的唯一实例由单件类本身来控制,所以可以很好地控制用户何时访问它。
单件类(Singleton)