. 问题的引出

  今天,碰到一个问题,问题的描述如下:

在通讯设备(如手机)上编写一个Application,在这个Application,需要某个国家的所有机场和对应机场的航班.很显然,这些数据还是蛮大的,如果通过无限传输,肯定是比较慢,并且又浪费你的上网费,对吧.况且每次运行这个Application,都需要无限传输加载一次,这样不是太理想.于是我想把这些数据放在通讯设备上.这样就可以避免上述的情况,速度比较快,并且比较经济.

既然是放在通讯设备上,那么就得从这个设备上去读取.仔细一想,我运行这个Application时只需要从内存里面读取一次即可,不要每次用到这些数据的时候都去读取,这样效率应该不是很理想.

研究了一下,这个设备只支持用J2ME来编写这个Application.这样就引出了一个问题.如果把读取出来的数据作为一个变量放在那里,而不去用它.会出现什么情况呢?大家都知道Java有垃圾回收的机制.如果你不去调用它,它到时候会当成垃圾给回收,这样,当你去用的时候,这些数据已经不存在了.如何解决呢?

.问题的解决方案

很明显,单件就是比较合适的解决方案.为什么?

 第一,这个Application只需要一份机场以及机场航线的记录,这是利用单件很重要的原因之一.

第二,这个Application使用机场随时都有可能.换句话说,这个机场记录应该在Application运行期间随时都存在,而不应该被当成垃圾给回收掉.这样,让我们一步一步来想,如果记录不被回收掉,肯定应该有客户端来调用它,那么由谁来调用呢,显然,最后的调用者就是它本身.这样,最直接的结果就是,一旦这个记录被读取出来,他在运行的过程中就不会被回收.换句话说,就是单件一旦建立,这个记录就会存在,知道Application结束为止.

基于上面的2个原因,我认为单件是比较合适的选择.

.单件的描述

 单件分为饿汉式单件和懒汉式单件以及登记式单件,具体的情况可以参考GOF<<Design Pattern>>和阎宏的<<Java与模式>>.

 应用单件的条件是:在一个系统下,一个类只需要一个实例即可.在这种情况下才可用单件.比如说,我们用的Windows的回收站,打印池等等.

其实,我自己认为单件有很多时候都喜欢用错,不好区分,所以关于此,我还是得继续学习学习,深入思考呀.

,设计

系统的静态结构如下:设计模式之单件(Singleton)的应用

 

可以看到Airports的构造函数是私有的,调用getInstance()得到Airports的一个实例.

.源代码(Java编写):

 

 1设计模式之单件(Singleton)的应用package java.business.collection;
 2设计模式之单件(Singleton)的应用import java.business.entity.Airport;
 3设计模式之单件(Singleton)的应用
 4设计模式之单件(Singleton)的应用public class Airports
 5

Airport类的代码:

 1设计模式之单件(Singleton)的应用package java.business.entity;
 2设计模式之单件(Singleton)的应用
 3

 

 

 

 

 

 

相关文章:

  • 2021-09-30
  • 2021-11-08
  • 2022-01-20
  • 2022-01-21
  • 2021-11-26
猜你喜欢
  • 2021-07-08
  • 2022-12-23
  • 2021-12-10
  • 2022-01-22
  • 2021-06-14
  • 2021-12-28
  • 2022-12-23
相关资源
相似解决方案