博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Android 源码设计模式解析与实战》——第2章,第2.5节单例模式的简单示例
阅读量:6369 次
发布时间:2019-06-23

本文共 2161 字,大约阅读时间需要 7 分钟。

本节书摘来自异步社区《Android 源码设计模式解析与实战》一书中的第2章,第2.5节单例模式的简单示例,作者 何红辉 , 关爱民,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.5 单例模式的简单示例

单例模式是设计模式中比较简单的,只有一个单例类,没有其他的层次结构与抽象。该模式需要确保该类只能生成一个对象,通常是该类需要消耗较多的资源或者没有多个实例的情况。例如,一个公司只有一个CEO、一个应用只有一个Application对象等。下面以公司里的CEO为例来简单演示一下,一个公司可以有几个VP、无数个员工,但是CEO只有一个,请看下面示例。

示例实现代码package com.dp.example.singleton;// 普通员工public class Staff {   public void work() {    // 干活  }}// 副总裁public class VP extends Staff {  @Override  public void work() {    // 管理下面的经理  }}// CEO,饿汉单例模式public class CEO extends Staff {  private static final CEO mCeo = new CEO();  // 构造函数私有  private CEO() {  }  // 公有的静态函数,对外暴露获取单例对象的接口  public static CEO getCeo() {    return mCeo;  }  @Override  public void work() {    // 管理VP  }}// 公司类public class Company {  private List
allStaffs = new ArrayList
();  public void addStaff(Staff per) {    allStaffs.add(per);  }  public void showAllStaffs() {    for (Staff per : allStaffs) {      System.out.println("Obj : " + per.toString());    }  }}public class Test {  public static void main(String[] args) {    Company cp = new Company() ;    // CEO对象只能通过getCeo函数获取    Staff ceo1 = CEO.getCeo() ;    Staff ceo2 = CEO.getCeo() ;    cp.addStaff(ceo1);    cp.addStaff(ceo2);    // 通过new创建VP对象    Staff vp1 = new VP() ;    Staff vp2 = new VP() ;    // 通过new创建Staff对象    Staff staff1 = new Staff() ;    Staff staff2 = new Staff() ;    Staff staff3 = new Staff() ;    cp.addStaff(vp1);    cp.addStaff(vp2);    cp.addStaff(staff1);    cp.addStaff(staff2);    cp.addStaff(staff3);    cp.showAllStaffs();  }} 

输出结果如下:

Obj : com.android.dp.book.chapter2.company.CEO@5e8fce95Obj : com.android.dp.book.chapter2.company.CEO@5e8fce95Obj : com.android.dp.book.chapter2.company.VP@8b3Obj : com.android.dp.book.chapter2.company.VP@222d10Obj : com.android.dp.book.chapter2.company.Staff@1aa488Obj : com.android.dp.book.chapter2.company.Staff@3dfeca64Obj : com.android.dp.book.chapter2.company.Staff@22998b08

从上述的代码中可以看到,CEO类不能通过new的形式构造对象,只能通过CEO.getCEO()函数来获取,而这个CEO对象是静态对象,并且在声明的时候就已经初始化,这就保证了CEO对象的唯一性。从输出结果中发现,CEO两次输出的CEO对象都是一样的,而VP、Staff等类型的对象都是不同的。这个实现的核心在于将CEO类的构造方法私有化,使得外部程序不能通过构造函数来构造CEO对象,而CEO类通过一个静态方法返回一个静态对象。

转载地址:http://dcgma.baihongyu.com/

你可能感兴趣的文章
第十三天-企业应用架构模式-对象-关系元数据映射模式
查看>>
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
查看>>
Python 比特币教程之二: 机器人收发比特币
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
怎样将优酷网站下载的视频KUX转MP4格式
查看>>
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>
关于 Promise 的 9 个提示
查看>>
算法复习
查看>>
安卓中高级开发面试知识点之——缓存
查看>>
Java的初始化顺序
查看>>
js 判断回文字符串
查看>>
shields小徽章是如何生成的?以及搭建自己的shield服务器
查看>>
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>