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. wpf小玩意之关键字文本框

    有些时候,我们会碰到在输入文本时高亮一些文本关键字,譬如以下这图: 很明显,这个输入的文本中有四个关键字,正常文本都是黑色,关键字文本用了其他颜色.那么我们如何达到这种效果呢.wpf的textbloc ...

  2. [Codeforces]Good Bye 2017

    A - New Year and Counting Cards #pragma comment(linker, "/STACK:102400000,102400000") #inc ...

  3. WinRAR 5.60 无广告正式版

    首先明确WinRAR唯一的官网是这个 https://www.rarlab.com/ 其余的都不要相信. 现在的问题是:不要脸的中国代理强行捆绑广告:即使你花钱注册同样要面对弹窗广告!这就不可接受了! ...

  4. 「Redis 笔记」常用命令

    编号 命令 描述 1 DEL key 此命令删除一个指定键(如果存在). 2 DUMP key 此命令返回存储在指定键的值的序列化版本. 3 EXISTS key 此命令检查键是否存在. 4 EXPI ...

  5. (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

    http://www.cnblogs.com/wuhuacong/p/3871991.html 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览 在博客园很多文章 ...

  6. RabbitMQ学习之队列监控

    对于RabbitMQ的监控,除了服务器基本信息(硬盘.CPU.内存.IO等)以及MQ的进程和端口,我们也可以通过请求url访问管理API监控其集群和队列的情况.在Javaapi 3.6.0以后,cha ...

  7. 我的第一个 Windows 窗口程序(1)

    一般来说,构建一个 Windows 程序可以分为如下几个步骤: 定义窗口类(WNDCLASS) 注册窗口类(RegisterClass) 创建窗口(CreateWindow) 更新显示窗口(Updat ...

  8. nginx的一些

    二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS ...

  9. vue 动态获取div宽高有时候为0的情况

    项目背景: 需要使用echarts进行图表展示.由于div宽高是不固定的,因此需要先获取父级的宽高再把值赋予到图表的div中. 需要使用 this.$nextTick(() => {    }) ...

  10. Django入门--模型系统(二):常用查询及表关系的实现

    1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...