程序中所有的依赖关系都终止于抽象类或者接口, 才是真正的面向对象设计

设计原则一 : 单一职责原则

定义: 对于一个类,应该只有一个引起它变化的原因.

优点: 降低类的复杂度,提高类的可读性,提高系统的可维护性.

例子:

//超人类publicclassSuperMan{publicvoid维护世界和平(){//超人维护世界和平}}扩展:publicclassAnimal{publicvoidbreathe(Stringanimal){System.out.println(animal+"在空气中呼吸");}publicvoidbreathe2(Stringanimal){System.out.println(animal+"在水中呼吸");}}

可以违反单一职责原则的条件: 需要足够简单的逻辑,才可以在 代码级别上 违反单一职责原则.

需要类中的方法数量足够少,才可以在 方法级别上 违反单一职责原则.

设计原则二 : 里氏代换原则 (Liskov Substitution Principle, LSP)

定义: 子类型必须能够替换掉它们的父类型.

该原则反映了父类和子类的关系,是面向对象设计中最重要也是最基本的原则之一.

优点:使的代码复用变得简单

//老木匠类publicclassOldCarpenter{publicvoidmakeFurniture(){System.out.println("做出一把椅子!");}}//老木匠徒弟类publicclassYoungFurniture()extendsOldCarpenter{//覆盖父类方法@OverridepublicvoidmakeFurniture(){super.makeFurniture();System.out.println("装饰了一下椅子!");}}

设计原则三 : 开放-封闭原则(Open Closed Principle, OCP)

定义: 程序的实体对象(模块,类,函数等)应该可以进行扩展,但不应该可以修改

特征: 对于扩展是开放的, 对于修改是封闭的

意义: 开放-封闭原则的核心思想就是面向抽象编程

//动物类publicclassAnimal{//动物会呼吸publicvoidbreath(){System.out.println("呼吸");}}//猫类从动物类继承publicclassCatextendsAnimal{publicvoidcatchMouse(){System.out.println("猫抓老鼠");}}//咪咪类publicclassMimiextendsCat{publicvoidSwimming(){System.out.println("咪咪在游泳");}}

设计原则四 : 依赖倒转原则

定义: 程序的高层模块不应该依赖于低层模块,但两者都应依赖于抽象 ; 抽象不应该依赖于具体细节,而细节应该依赖于抽象.

面向对象应该针对接口编程,而不是针对现实编程.

使用该原则的规范: 1. 每个类尽量都继承自接口或抽象类 , 或者 抽象类和接口两者都具备.

2. 变量的显示类型尽量是接口或者是抽象类

3. 尽量避免从具体类派生

4. 尽量不要覆盖基类的方法 , 因为类间依赖的是抽象,覆盖了抽象的方法,对依赖的稳定性会产生一定

的影响

//工作者接口interfaceIWorker{publicvoidwork();}publicclassWorkerimplementsIWorker{@Overridepublicvoidwork(){//TODOAuto-generatedmethodstub}}//新增工作者publicclassSeniorWorkerimplementsIWorker{@Overridepublicvoidwork(){//TODOAuto-generatedmethodstub}}//管理类publicclassManager{IWorkerm_worker;publicvoidsetWorker(IWorkerw){m_worker=w;}publicvoidmanager(){m_worker.work();}}

设计原则五 : 合成/聚合复用原则

定义: 尽量不使用类继承, 而尽量使用合成/聚合

聚合是一种比较"弱"的拥有关系,具体表现是 ; 甲对象中可以包括乙对象,但乙对象不是甲对象的一部分

合成是一种比较"强"的拥有关系,具体表现是 : 严格的整体与部分之间的关系,且整体与部分有相同的生命周期

怎样选择使用继承还是 合成/聚合方法?

1. 子类是父类的一个特殊种类,而不是父类的一个角色时,使用继承.即区分是"Is-A"和"Has-A". "Is-A"用继承,"Has-A"用合

成/聚合

2. 永远不会出现需要将子类换成另外一个类的子类时,使用继承.

3. 子类具有继承父类的责任,而不是重写父类的方法时,使用继承

设计原则六 : 迪米特法则(最少知识原则)

定义: 如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用. 如果其中一个类需要调用另一个类的某个方法,可以通过第三方来转发这个调用.


更多相关文章

  1. 【Android】之【对话框 Dialog】
  2. android 从顶层到底层 学习笔记--- framework架构
  3. android数据库(随apk一起发布数据库)
  4. Android(安卓)Activity类
  5. Android复写BaseAdapter并显示ListView视图
  6. Android在java代码中设置margin
  7. Android知识点(自己版)
  8. [Android(安卓)Pro] Android开发实践:为什么要继承onMeasure()
  9. Android(安卓)Studio 单元测试

随机推荐

  1. android下适配器
  2. Android通过XML来定义Menu
  3. Android 基于Zxing扫码实现(三)、从相册选
  4. 使用jni接口完成android本地程序的运行
  5. TextureView+SurfaceTexture+OpenGL ES来
  6. 服务器日志现 Android 4.2 传将添多项新
  7. Android进程保活方法 --转自腾讯Bugly公
  8. Android(安卓)给应用定制皮肤-------值得
  9. Android(安卓)培训计划:如何从功能机时代
  10. [置顶] Android异步更新UI-线程池-Future