Reusability

1. 复用的层面

1.1 代码级别复用

顾名思义,代码复用就是把代码都搬过来,这是最主要的复用

1.1.1 白盒复用

白盒的意思就是里面的东西我们都知道是什么,具体实现的方式也知道,直接把源代码复制过来,可以根据自己的实际需求修改里面的代码(这个应该是最熟悉的,毕竟我们以前写作业遇到不会的就是这么写的嘛)

优点:个性化、可定制化程度高

缺点:增加了软件的复杂度,需要对源代码有一定的了解

1.1.2 黑盒复用

黑盒的意思是里面的东西不知道是什么,也没法改,只知道怎么用(详情参加微积分学习方法hh)

优点:简单、清晰

缺点:适应性差一些

1.2 模块级别复用

一般来说就是把封装好的类、接口等等直接拿过来用,根据它的spec来复用

1.3 类库级别复用

例如Java Library 像我们平时用的一些API例如Map, Set, List都属于这一方面

1.4 系统级别的复用:框架(Framwork)

1.4.1 框架的定义

里面有一系列的抽象类、具体类以及对应的spec却没有具体实现,需要开发者自己根据spec进行代码填充

只有骨架,没有血肉。

Framework作为主程序执行,调用开发者写的具体实现;

开发者根据Framework预留的接口实现

可以将框架看作是更大规模的API复用,除了提供可复用的API, 还将这些模块之间的关系都确定了下来,等于说就是复用了一个系统,系统的内容由我们开发者自己填写

1.4.2 领域复用

实现一个系统(框架)需要将抽象类中的一些抽象方法进行具体的实现或者针对特定的应用增加新的方法。

1.4.2.1 Hook Method

通过重写方法的方式实现在一个应用当中对框架的扩展。它可以降低接口和应用的需求之间的耦合度(依赖性)

我的理解是API内部有实现方法,但不能够直接拿来用,Hook Method是将用户需求和API内部实现方法连接起来的,有点类似于设计模式中的template模式。

1.4.2.2 Inversion of Control

一般来说都是由写代码的人来控制各个接口、类之间的关系,但对于框架来说这都是定死的了,实现者无法修改框架中类之间的关系

带来了好处就是降低了对象之间的依赖程度,提供灵活性和可维护性

1.4.2.3 Non-modifiable framework code

框架中的代码是无法改变的,实现者只能扩展功能, 但不能修改基本功能

1.4.3 框架设计

1.4.3.1 框架根据应用的不同而不同

框架本身设计是为了解决不同类型的问题而不是针对某一单一问题,因此它更像是一个模板,所以对于不同类型的应用,框架的设计不同

1.4.3.1 框架扩展方式
1.4.3.1.1 白盒框架

之前提到过白盒的意思是知道里面的东西是什么,所以可以通过inheritance,override,dynamic binding来扩展框架

1.4.3.1.2 黑盒框架

黑盒是我们不知道里面有什么,只知道怎么用。

类似于插件,通过spec了解某个模块的作用然后直接调用这个模块实现某个功能也就是delegation

Reusability1的更多相关文章

随机推荐

  1. P3399 丝绸之路

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  2. 全能VIP音乐在线解析

    浏览器安装暴力猴扩展即可使用 // ==UserScript== // @name 全能VIP音乐在线解析 // @version 0.0.10 // @homepage https://greasy ...

  3. 织梦忘记密码DedeCMS密码重设工具radminpass找回密码

    本工具是用于新人忘记管理员密码重设所制作,只需要将radminpass.php文件拷贝到根目录,运行“http://yousite/radminpass.php(yousite为网站域名)”,按照操作 ...

  4. JDBC+MYSQL初始学习

    JDBC+MYSQL初始学习 一.学习准备 Eclipse 开发工具  + mysql数据库+navicat 数据库连接工具 Mysql的数据库连接驱动jar包  + testing测试集成+mave ...

  5. C# dataGridView1 添加数据 和清空数据

    #region MyRegion DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn(); DataGridViewTextBo ...

  6. cordova 打包工具

    一.环境安装 1.安装NodeJs https://nodejs.org 直接去官网下载并按默认路径安装就可以了. 安装完成后在命令行:   (测试成功!) $ npm 2.安装Cordova 命令行 ...

  7. sass揭秘之@mixin,%,@function(转载)

    因为文章内含有很多sass代码,如需自己动手查看编译结果,推荐使用sassmeister这款在线编译工具,方便你阅读学习. 在阅读本文章之前,请先确认你已经阅读了上篇文章sass揭秘之变量,不然会给你 ...

  8. C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器

    01 上次课程回顾 昨天讲了三个容器 string  string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...

  9. [置顶] 来自 HeroKu 的 HTTP API 设计指南(中文版)

    转载:http://get.jobdeer.com/343.get 来自 HeroKu 的 HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国 ...

  10. 利用Selenium实现图片文件上传的两种方式介绍

    在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...