比如下面的例子:

projectStatusBar -->(refer to)projectApplication,因为它需要取到application level的一些数据(似乎不大合理,不应该这样依赖);现在需要给application对象增加一个新的成员变量mStatusBar,这就造成了新的dependency关系:projectApplication--> projectStatusBar。这就出现了circular dependency。

解决方法非常普通并且普遍 :

1. (假设并且一定已经)有一个interface project,它的任务就是包含一堆interface。我在里面加一个IStatusBar并定义需要在application类里使用的功能。

2. 在application里加个成员变量时IStatusBar类型。这样ProjectApplication-->interface project. 有其他人(code out of this project)会赋值给它。

3. 在projectStatusBar里,让StatusBar实现IStatusBar,这样ProjectStatusBar --> interface Project.

4. 在另外一个project里,把StatusBar实例赋值给application对象。那么这个project --> ProjectApplication + ProjectStatusBar。这种作用的project应该很容易找到,比如ProjectStatusBar就足够了。

5. Now it works without bringing in circular dependency relationship!

转载于:https://www.cnblogs.com/taoxu0903/archive/2011/03/25/1995756.html

Interface Project相关推荐

  1. 【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )

    文章目录 一.settings.gradle 映射为 Settings 类 二.build.gradle 映射为 Project 类 Android Plugin DSL Reference 参考文档 ...

  2. Project的介绍

    文章目录 1. Settings 2. Project 2.1 常用 project API 2.2 project 属性 2.3 文件相关 API 2.4 其它API 1. Settings 讲到s ...

  3. Gradle学习之基础篇

    一.gradle基础概念 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.Gradle抛弃了基于各种繁琐的XML,使用一种基于Groovy的特定领域语言( ...

  4. Remoting Practice Sample

    Remoting Practice Sample 这两天研究了一下Remoting, 改了MSDN 的例子. 那个例子不是很方便. 我做了如下改进: 整个sample做成一个solution 用了wi ...

  5. repo入门和基本用法

    repo是什么? 官方的定义:Repo是谷歌用Python脚本写的调用git的一个脚本,可以实现管理多个git库. 个人理解:repo这个工具,是一个脚本.这个脚本是对git库的管理. 类似什么呢,类 ...

  6. linux操作系统学习网站整理(100个)

    linux操作系统学习网站整理(100个) 评选出的这100个优秀站点,将按照下述20个类别作以评介: (一) 文件下载 (二) 幽默娱乐 (三) 相关新闻 (四) 通用硬体 (五) 专用硬体 (六) ...

  7. Deep Learning(深度学习)学习笔记整理系列

    一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一.虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生& ...

  8. 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )

    文章目录 一.顶层 Gradle 定义扩展变量 二.获取顶层的 Gradle 对象 三.Module 中使用 Gradle 变量 四.Gradle 中打印变量值 五.涉及到的 Gradle 构建脚本 ...

  9. [转]机器视觉开源代码集合

    一.特征提取Feature Extraction: SIFT [1] [Demo program][SIFT Library] [VLFeat] PCA-SIFT [2] [Project] Affi ...

  10. 计算机视觉、机器学习相关领域论文和源代码大集合

    注:下面有project网站的大部分都有paper和相应的code.Code一般是C/C++或者Matlab代码. 最近一次更新:2013-3-17 一.特征提取Feature Extraction: ...

最新文章

  1. 动车废票二维码将泄露个人信息 暂无防止破解法
  2. tta部署_YOLOv5项目介绍
  3. 终身学习这件事,比你想的还要重要
  4. 6.4 JAVA 方法重载
  5. Openstack介绍
  6. [剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]
  7. 以前看过一个压缩过的.exe,运行会播放长达半小时的动画,却只有60KB,个人认为其中的原理...
  8. 信息安全工程师笔记-网络设备安全
  9. oracle 尝试分配内存不足,ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法...
  10. Head First Java
  11. HDU 4512 吉哥系列故事——完美队形I(最长公共上升子序列 LCIS)
  12. win7局域网共享设置_win7系统打印机共享设置(详细图文步骤)
  13. 数据库设计——概念模型
  14. VS Code 必须要安装的插件(超详细)
  15. HDUOJ 6441 Find Integer
  16. Xcode的一种编译问题:Error: building could produce unreliable results
  17. 数值分析——曲线拟合的最小二乘法
  18. 管理 - STAR法则
  19. [unity]使用Unity粒子系统制作跑尘
  20. GameFramework篇:AssetsBundle Tools配置

热门文章

  1. libc库和系统调用
  2. Android 网络代理的创建
  3. Centos66 编译 Freeswitch mod_shout mp3录音模块
  4. linux下交叉编译ffmpeg,并加入H264编码支持
  5. pfn_to_page 函数
  6. Linux shell 查找操作
  7. 如何提高Android系统Aututu benchmark跑分
  8. rdlc报表 矩形高固定_什么是 BI?和报表有什么关系?有了 BI 还要做报表吗?
  9. oracle 多实例 端口,Oracle一个实例配置多个listener或多个端口
  10. 5加载stm32 keil_【STM32笔记】在SRAM、FLASH中调试代码的配置方法(附详细步骤)...