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

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

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

相关文章推荐

设计模式怎样解决设计问题

  • 2009年12月19日 12:40
  • 2KB
  • 下载

0.1-设计模式怎么样解决设计问题-抽象与封装、继承、多态

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

【设计模式】使用设计模式来解决设计问题

面向对象设计最困难的部分是将系统分解成对象集合。因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等等,它们都影响着系统的分解,并且这些因素通常还是互相冲突的。 设计的许多对象来源于现...

【C++语言99个常见编程错误】第8章 类型设计问题

第8章 类型设计问题 set和get状态接口 int getValue() const { return value; } void setValue(int value) { this.value...

vs2005无法进行设计问题解决办法

  • 2010年06月05日 20:37
  • 787KB
  • 下载

最小机器设计问题代码实现

  • 2014年07月14日 11:08
  • 3KB
  • 下载

一些思考方式——从continue按钮的实现暴露的设计问题

一、功能背景用户每天会学习一些课程,我希望下次当用户再次学习的时候能够知道从哪里开始上次的学习。由于有很多的课程,通过list的方式提供给用户,用户如果自己找就会很不方便。那么就提供一个continu...
  • wxv111
  • wxv111
  • 2016年04月07日 23:36
  • 236

设计模式——面向接口编程之柔性多态增强代码的可扩展性

多态和封装、继承一起作为面向对象的三大特性,无论是Java还是其他面向对象的语言,灵活使用好多态,对于提高我们的编码质量尤其重要。...

设计模式(四)std::function接口编程彻底取代抽象工厂和工厂方法

用户不必关心对象的类型就可以创建自己想要的对象。统一创建对象的入口,可以方便的创建各种类型的对象(这些对象有统一的基类) 特点:使用智能指针获取对象,而不是暴露原始指针。 代码: #include "...

面向接口编程的设计模式

面向接口编程的设计模式简单工厂模式 假设程序中有个Computer类需要组合一个输出设备,现在有两个选择:直接让Computer类组合一个Printer,或者让Computer类组合一个Output,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:0.2-设计模式怎么样解决设计问题-针对接口编程,而不是针对实现编程
举报原因:
原因补充:

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