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)客户无须知道他们使用的对象是用什么类来实现的,他们只需知道定义接口的抽象类
这将极大地减少子系统实现之间的相互依赖关系

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

面向接口编程与面向实现编程 ---------------------------------------- 前引: 1、什么时候用接口,什么时候用抽象类 取决于是具体的环境,以及开发者想要实现什么样...
  • chyin1024
  • chyin1024
  • 2017年01月14日 12:01
  • 678

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

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

Mybatis接口编程原理分析(一)

Mybatis接口编程示例(1)首先定义接口编程需要的接口及其方法public interface IUserMapper { public User getById(int id);//接口...
  • qq924862077
  • qq924862077
  • 2016年09月18日 20:15
  • 1292

一篇非常经典的文章(面向接口编程)

原文链接:http://blog.chinaunix.net/uid-20478213-id-1942005.html 面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是...
  • legend404
  • legend404
  • 2016年10月14日 10:10
  • 1401

使用程序解决一道逻辑推理题

今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客)         小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是...
  • breaksoftware
  • breaksoftware
  • 2013年03月14日 20:55
  • 3255

音频编程接口

三、编程接口 如何对各种音频设备进行操作是在Linux上进行音频编程的关键,通过内核提供的一组系统调用,应用程序能够访问声卡驱动程序提供的各种音频设备接口,这是在Linux下进行音频编程最简单也...
  • molibaobei90
  • molibaobei90
  • 2014年12月03日 17:27
  • 345

面向接口编程的设计模式

面向接口编程的设计模式简单工厂模式 假设程序中有个Computer类需要组合一个输出设备,现在有两个选择:直接让Computer类组合一个Printer,或者让Computer类组合一个Output,...
  • greenlihui
  • greenlihui
  • 2017年03月13日 13:18
  • 885

java中面向接口编程的好处

一、 像J2EE中的API规范基本上都是接口,由各应用服务器来实现,比如:WebSphere按照这个接口实现自己的,WebLogic也按照这个接口实现自己的,作为开发者来说我们根本就不用去管谁是怎样...
  • Code_lr
  • Code_lr
  • 2016年03月15日 20:33
  • 5741

为什么要针对接口编程

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

Mybatis面向接口编程

在使用Mybatis的时候,我们通过sqlSession的各种方法和数据交互,比如查询我们是通过sqlSession.selectList("Namespace.sqlId",paramObj),对于...
  • dyy_gusi
  • dyy_gusi
  • 2015年10月16日 16:52
  • 2161
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:0.2-设计模式怎么样解决设计问题-针对接口编程,而不是针对实现编程
举报原因:
原因补充:

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