设计模式 之 单件模式

注:该笔记整理自清华大学耿祥义教授的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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值