设为首页 加入收藏

TOP

Android源码分析之单例模式
2014-11-23 21:31:40 来源: 作者: 【 】 浏览:13
Tags: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 allPersons = new ArrayList();


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是唯一实例,而其他类型都是不同的实例。



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C中实现覆写init函数以.. 下一篇C++11中的std::bind与Socket中的b..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: