设计一个软件框架的关键点
1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则
定义:高层模块不应依赖底层模块,两者都应该依赖抽象。抽象不应依赖细节,细节应该依赖抽象。在软件设计中,细节是多变的,抽象则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要更稳定。
比方:我们建造房子,建筑结构师会设计整个建筑的框架,并预留很多填充空间供房主自行装修。
核心思想:这样高层模块掌握了主动权,成为规则或约束的制定者,同时也需要对整个系统的稳定、性能、安全负责。底层模块基于规则或约束进行个性化的实现,满足各自的需求。
好莱坞原则
定义:Don't call me,I'll call you.
理解:好莱坞的演艺公司对整个娱乐完全控制,并制定游戏规则。艺人依赖好莱坞演艺公司,演艺公司不依赖于艺人。艺人在好莱坞的游戏规则里,完成每个人的艺术作品。
结论:和依赖倒置原则思想基本一样,所以依赖倒置原则又被称为好莱坞原则
2. 请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Android Framework 的实现,使用了依赖倒置原则。
整体架构
Android Framework 完成整个应用的框架实现,并定义了四大组件Activity, Service, Content Provider, Broadcast Receiver,应用开发者只需实现四大组件,并完成相关配置,就可以完成一个App的开发。可见Android Framework 高层模块 不依赖于 应用开发者底层的实现模块,这里就使用了依赖倒置原则。
具体实现
以用户界面展示的Activity组件来具体分析怎么实现依赖倒置原则的,分为:
App:应用层,依赖Framework层完成App开发,开发者就需两步就可以快速完成一个Andorid App的开发。比如:用户界面展示
i) App继承Framework提供的各种Acitivity基类,并override相应的生命周期函数((onCreate(), onStrat(), onResume, onStop(), onDestroy))实现功能;
ii) 在manifest配置文件配置该Activity;
iii) 其他的事情就交给Framework就可以了;
Framework:框架层,实现整个android App的运行机制。大概流程如下:
i) 应用界面点击icon, 调用Activity A的 startActivity;
ii) 提供IBinder调用ActivityManagerService startActivity;
iii) AMS 提供socket通信 到Zgote 创建process;
iv) 调用ActivityStack 做栈的处理;
v) 调用ApplicationThread, 通过Handler sendMessage;
vi) ActivityTread handleMessage, new Activity B 实例,并调用相应的生命周期函数;
3. 请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
多继承方式
适配器方式
版权声明: 本文为 InfoQ 作者【dony.zhang】的原创文章。
原文链接:【http://xie.infoq.cn/article/aebc1635d21c2209f1bf3e8fc】。文章转载请联系作者。
评论