Android源码分析之单例模式

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

使用场景

确保某个类有且只有一个对象的场景。

UML类图

Android源码分析之单例模式

角色介绍

Singleton : 单例类.

简单示例

单例模式是设计模式中最简单的,只有一个单例类,没有其他的层次结构与抽象。该模式需要确保该类只能生成一个对象,通常是该类需要消耗太多的资源或者没有没有多个实例的理由。例如一个公司只有一个CEO、一台电脑通常只有一个显示器等。下面我们以公司里的CEO为例来简单演示一下,一个公司可以有几个VP,无数个员工,但是CEO只有一个,请看下面的实现代理 :

package com.dp.example.singleton;
/**
 * 人的基类
 * @author mrsimple
 *
 */
public abstract class Person {
 public abstract void talk() ;
}

// 普通员工
public class Staff extends Person {

@Override
 public void talk() {

}

}

// 副总裁
public class VP extends Person {

@Override
 public void talk() {

}
}

// CEO, 单例模式
public class CEO extends Person {

private static final CEO mCeo = new CEO();

private CEO() {
 }

public static CEO getCeo() {
  return mCeo;
 }

@Override
 public void talk() {
  System.out.println("CEO发表讲话");
 }

}

// 公司类
import java.util.ArrayList;
import java.util.List;

public class Company {
 private List<Person> allPersons = new ArrayList<Person>();

public void addStaff(Person per) {
  allPersons.add(per);
 }

public void showAllStaffs() {
  for (Person per : allPersons) {
   System.out.println("Obj : " + per.toString());
  }
 }
}

// test
public class Test {
 public static void main(String[] args) {
  Company cp = new Company() ;
  Person ceo1 = CEO.getCeo() ;
  Person ceo2 = CEO.getCeo() ;
  cp.addStaff(ceo1);
  cp.addStaff(ceo2);
 
  Person vp1 = new VP() ;
  Person vp2 = new VP() ;
 
  Person staff1 = new Staff() ;
  Person staff2 = new Staff() ;
  Person staff3 = new Staff() ;
 
  cp.addStaff(vp1);
  cp.addStaff(vp2);
  cp.addStaff(staff1);
  cp.addStaff(staff2);
  cp.addStaff(staff3);
 
  cp.showAllStaffs();
 }
}

输出结果

Android源码分析之单例模式

可以看到, CEO两次输出的CEO对象的文字描述都是一样的,而VP、Staff类的对象都是不同的。即CEO是唯一实例,而其他类型都是不同的实例。

Android-x86 4.4-r1 发布下载,kitkat-x86 首个稳定版

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/da40cfe8c8c6933e3ff4a017b7c33854.html