概述
安卓六大设计原则包括:
(1) 单一职责原则;
(2)里氏替换原则;
(3)依赖倒置原则;
(4)接口隔离原则;
(5)迪米特原则;
(6)开闭原则。
一.单一替换原则
定义:它规定一个类应该只有一个发生变化的原因
特点:
(1)降低类的复杂度,对类或接口的职责有明确的定义;
(2)提高可读性;
(3)降低变更引起的风险,接口改变只影响相应的实现类,不影响其他类。
重点:
(1)接口一定要做到单一原则;
(2)类的单一原则比较难以实现,尽量做到只有一个原因引起变化;
(3)一个方法尽可能做一件事情,能分解就分解,分解到原子级别。
适用范围:接口,方法,类。
栗子:封装log工具类,可以全局打印,自动获取类名作为TAG,在log信息后面附加方法名,线程,机型,网络信息。
二.里氏替换原则
定义:所有引用基类的地方必须能透明的使用其子类的对象;(只要出现父类的地方都可以替换成子类,替换后不会产生任何错误,使用只需要知道是父类还是子类)
优缺点:核心是继承,所以她的优缺点也就是继承的优缺点。
继承优点:
(1)代码共享:共享代码,子类都拥有父类的方法和属性,将父类的代码共享给了子类;
(2)重用性:提高代码的重用性,子类重用了父类的代码;
(3)子父类异同:子类形似父类,异于父类,父子都不同;
(4)扩展性:提高代码的可扩展性,子类就可以为所欲为了,子类可以随意扩展父类;
(5)开放性:提高产品或项目的开放性,父类随意扩展,开放性随之增加了;
继承缺点:
(1)灵活性:降低代码的灵活性,子类必须拥有父类的属性和方法,子类受到了父类的约束。这时从子类的角度讲的;
(2)耦合性:增强了耦合性,父类的属性和方法被修改时,还需要顾及其子类,可能会带来大量的重构,这时从父类的角度讲的。
里氏替换优点:继承优点
里氏替换缺点:
(1)将子类都当作了父类使用,抹杀了子类的个性
(2)将子类单独作为一个业务来使用,会让代码间的关系都复杂化,缺乏类替换标准。
重点:
(1)返回值:父类方法返回值类型F,子类方法返回值类型S,里氏替换原则是S范围必须小于F。(向下转型)
(2)重载:父类和子类的方法参数类型或者数量不用,如果要符合里氏替换原则的话,子类参数必须大于等于父类参数,即不能让子类自己定义的方法被调用
三.依赖倒置原则
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节不应该依赖抽象
重点:抽象就是接口和抽象类,细节就是具体的实现类
优点:
(1)减少类之间的耦合
(2)提高系统稳定性
(3)降低并发风险
(4)提高代码可读性
依赖倒置注入实现:
(1)构造函数注入依赖对象:通过构造函数参数声明依赖对象;
(2)Setter()方法注入依赖对象:通过setter()函数参数声明依赖对象;
(3)接口注入依赖对象:通过接口的方法中的参数声明依赖对象
依赖本末本质:通过抽象(接口或者抽象类),使各个类和模块实现彼此独立,实现模块间松耦合
注意点:尽量不要覆盖方法,如果该方法已在抽象类中实现,子类不要覆盖。
四.接口隔离原则
定义:
(1)建立单一接口,功能尽量细化,不要建立臃肿的接口;
(2)不需要的接口:客户端尽量不依赖其不需要的接口,客户端需要什么接口就提供什么接口,剔除不需要的接口,对接口进行细化,保持方法最少;
(3)最小接口:类同的依赖关系应该建立在最小接口伤,尽量细化接口。
单一职责和接口隔离的区别:
单一职责:注重职责,注重业务逻辑的划分
接口隔离:注重的是接口的方法尽量少
特点:
(1)接口尽量小
(2)拆分接口 : 接口隔离的核心定义, 不出现臃肿的接口;
(3)接口高内聚
(4)高内聚 : 提高接口, 类, 模块的处理能力, 减少对外界交互;
(5)具体方法 : 接口中尽量少公布public 方法, 对外公布的 public 方法越少, 变更的风险就越小, 有利于后期的维护;
定制服务:
起源 : 系统模块间的耦合需要有相互访问的接口, 这里就需要为各个 客户端 的访问提供定制的服务接口;
要求 : 只提供访问者需要的方法, 不需要的就不提供;
接口隔离限度
(1)粒度小 : 接口粒度越小, 系统越灵活, 但是同时使系统结构复杂, 开发难度增加, 降低了系统的可维护性;
(2)粒度大 : 灵活性降低, 无法提供定制服务, 增大项目风险;
原子接口划分原则:
(1)接口模块对应关系 : 一个接口只服务于一个子模块 或 业务逻辑;
(2)方法压缩 : 通过业务逻辑, 压缩接口中得 public 方法, 减少接口的方法的数量;
(3)修改适配 : 尽量去修改已经污染的接口, 如果变更风险较大, 采用适配器模式进行转化处理;
五.迪米特法则
定义: 最少知识原则, 一个对象应该对其它对象有最少的了解, 即一个类对自己需要耦合或者调用的类知道的最少;朋友间必须保持距离
距离太近示例 : 朋友间不能无话不说, 无所不知, 类 A 与 B 耦合, B 将很多方法暴露给 A, 两个类之间的的耦合关系非常牢固, 这明显违反设计原则;
保持距离方法 : 将 类 B 暴露给 A 的方法封装, 暴露的方法越少越好, 类 B 高内聚, 与 A 低耦合;
设计方法 : 一个类的 public 方法越多, 修改时涉及的范围也就越大, 变更引起的风险也就越大, 在系统设计时要注意, 能用 private 就用private , 能用protected 就用 protected, 能少用 public 就少用 public,能加上 final 就加上 final;
优点 : 类间解耦, 弱耦合, 耦合降低, 复用率提高;
缺点: 类间的耦合性太低, 会产生大量的中转或跳转类, 会导致系统的复杂性提高, 加大维护难度;
六.开闭原则
定义:软件的实体 类, 模块, 函数 应该对扩展开放, 对修改关闭; 即 软件实体 应该 通过扩展实现变化, 不是通过 修改已有的代码实现变化;
优点:
(1)利于测试 : 如果改变软件内容, 需要将所有的测试流程都执行一遍, 如 单元测试, 功能测试, 集成测试等, 如果只是扩展, 只单独测试扩展部分即可;
(2)提高复用性 : 所有逻辑都从原子逻辑组合, 原子逻辑粒度越小, 复用性越大; 这样避免相同逻辑存在, 修改时需要修改多个此相同逻辑;
(3)提高可维护性 : 维护一个类最好的方式是 扩展一个类, 而不是修改一个类, 如果需要修改需要读懂源码才能修改, 扩展的话只需要了解即可, 直接继承扩展;
(4)抽象 单一 最小化,面向接口编程
(5)高扩展性
(6)高内聚低耦合
最后
以上就是满意眼睛为你收集整理的安卓六大设计原则的全部内容,希望文章能够帮你解决安卓六大设计原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复