0.2-设计模式怎么样解决设计问题-针对接口编程,而不是针对实现编程

原创 2016年10月01日 17:11:53
注1:
全文来自《设计模式——可复用面向对象软件的基础》的1.6节
该篇短小精悍,个人感觉是理解面向对象思想和设计模式的最佳内经心法
以下内容只是个人的读书笔记跪求各路神仙牛人指正理解上的偏差

另:
一个很重要的细节,《设计模式——可复用面向对象软件的基础》这本书1994年出版,而java是1995年诞生的



4

描述对象的实现(依赖关系)
Specifying Object Implement

对象通过实例化类来创建,此对象被称为该类的实例
当实例化类时,要给对象的内部数据(由实例变量组成)分配存储空间,并将操作与这些数据联系起来

新的类可以由已存在的类通过类继承(class inheritance)来定义
当子类(subclass)继承父类(parent class)时,子类包含了父类定义的所有数据和操作
子类的实例对象包含所有子类和父类定义的数据,且它们能完成子类和父类定义的所有操作

子类能重定义(override)父类定义的操作
重定义使得子类能接管父类对请求的处理操作

抽象类(abstract class)的主要目的是为它的子类定义公共接口
一个抽象类要把它的部分或全部操作的实现延迟到子类中[Factory Method],一个抽象类不能被实例化
在抽象类中定义却没有实现的操作被称为抽象操作(abstract operation)
非抽象类称为具体类(concrete class)

混入类(mixin class)是给其他类提供可选择的接口或功能的类,它与抽象类一样不能实例化
混入类要求多继承

一个对象的类(class)定义了对象是怎样实现的,同时也定义了对象的内部状态和操作的实现
一个对象的类型(type)只与它的接口有关,接口即对象能相应的请求的集合

一个对象可以有多个类型,不同类的对象可以有相同的类型
An object can have many types,and objects of different classes can have the same type

类继承,根据一个对象的实现定义了另一个对象的实现,它是代码和表示的共享机制
接口继承(或子类型化)描述了一个对象什么时候能被用来替代另一个对象

4.1

对接口编程,而不是对实现编程
Programming to an Interface,not an Implementation

继承所拥有的定义具有相同接口的对象族的能力是很重要的(通常可以从抽象类来继承)
因为多态依赖于这种能力

当继承被恰当使用时,所有从抽象类导出的类将共享该抽象类的接口。这意味着子类仅仅添加或重定义操作,而没有隐藏父类的操作
这时,所有的子类都能响应抽象类接口中的请求,从而子类的类型都是抽象类的子类型

只根据抽象类中定义的接口来操纵对象有以下两个好处:
1)客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口
2)客户无须知道他们使用的对象是用什么类来实现的,他们只需知道定义接口的抽象类
这将极大地减少子系统实现之间的相互依赖关系

通过抽象对象的创建过程,创建型模式提供不同方式以在实例化时建立接口和实现的透明连接
创建型模式确保你的系统是采用针对接口的方式书写的,而不是针对实现而书写的

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ava46/article/details/52717997

设计原则 —— 针对接口编程而不针对实现编程

1. 针对接口编程是多态性的体现 针对对象编程简单地说,就是传递的是具体的子类; 而针对接口编程,传递的则是父类引用,这样便可发挥多态性“父类引用指向子类对象”的特点和优势; 来看一个简答的例子:p...
  • lanchunhui
  • lanchunhui
  • 2017-07-24 11:42:20
  • 254

应该针对接口编程 而不是针对实现编程

应该针对接口编程 而不是针对实现编程 在面向对象设计方法中有很多值得提倡的方法,这些方法可以为我们的设计带来很大的灵活性,可复用性。 其中一个原则就是“针对接口编程,而不是针对实现编程...
  • wind19
  • wind19
  • 2011-11-15 10:22:18
  • 1719

针对接口编程,而不是针对实现编程

针对接口编程,而不是针对实现编程         在面向对象设计方法中有很多值得提倡的方法,这些方法可以为我们的设计带来很大的灵活性,可复用性。其中一个原则就是“针对接口编程,而不是针对实现编程”  ...
  • luanxj
  • luanxj
  • 2007-05-22 22:17:00
  • 5547

head first 读书笔记:策略模式(针对接口编程,而不是针对实现编程)

head first 学习笔记:设计鸭子应用
  • qq244272324
  • qq244272324
  • 2014-05-08 10:28:15
  • 821

依赖倒转原则--针对接口编程

在传统的过程性系统的设计办法倾向于使高层次的模块依赖于低层次的模块;抽象层次依赖于具体层次。倒转原则就是要把这个错误的依赖关系倒转过来。 依赖(或耦合)关系的分类: 零耦合关系:如果两个类...
  • lb_383691051
  • lb_383691051
  • 2015-07-13 18:44:34
  • 664

面向接口编程与面向实现编程

面向接口编程与面向实现编程最近拜读了四人组的经典名作《设计模式 可复用面向对象软件的基础》一书,打算以博客的形式进行笔记与思考书中提到了可复用面向对象设计的原则,其中的第一个原则是: 针对接口编程...
  • u013400743
  • u013400743
  • 2016-04-26 17:02:37
  • 9650

为什么要针对接口编程

接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。 接口反映了系统设计人员对系统的抽象理解的程度。 接口都是在一定的环境中产生的。脱离原先的环境,所有的接口将失去...
  • elf8848
  • elf8848
  • 2014-10-09 10:27:45
  • 942

java设计模式导论

  • 2011年01月27日 10:40
  • 877KB
  • 下载

对“针对接口编程,而不是针对实现编程”的理解

对“针对接口编程,而不是针对实现编程”的理解今天在阅读《Head First设计模式》的时候,看到了这句话:“针对接口编程,而不是针对实现编程”,第一次见到的时候,不太清楚作者想表达的意思,想着到后来...
  • u013518556
  • u013518556
  • 2018-03-06 11:14:43
  • 38

[C++编程] -- 面向接口编程

Java 中有 interface 关键字,C++ 中有抽象类或纯虚类可以与 interface 比拟,C 语言中也可以实现类似的特性。     在面试 Java 程序员时我经常问的一个问题是:...
  • zhengqijun_
  • zhengqijun_
  • 2016-12-28 17:12:41
  • 1366
收藏助手
不良信息举报
您举报文章:0.2-设计模式怎么样解决设计问题-针对接口编程,而不是针对实现编程
举报原因:
原因补充:

(最多只允许输入30个字)