Reusability1
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的更多相关文章
随机推荐
- linux下创建公钥
# linux下创建公钥 链接地址:https://www.cnblogs.com/ibyte/p/6086630.html 示例: scp -r /home/yutang/.ssh/id_rsa.p ...
- Python 实现简单图片验证码登录
朋友说公司要在测试环境做接口测试,登录时需要传入正确的图片的验证码,本着懒省事的原则,推荐他把测试环境的图片验证码写死,我们公司也是这么做的^_^.劝说无果/(ㄒoㄒ)/~~,只能通过 OCR 技术来 ...
- 经典C/S服务器模型之守护进程
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服务 ...
- winform右键菜单
public partial class Form1 : Form { ContextMenuStrip cms; Bitmap bm ; public Form1() { InitializeCom ...
- UVa340未完成
#include<stdio.h> #define maxn 1010 int main() { ; while(scanf("%d",&num)!=EOF&a ...
- RabbitMQ学习之Flow Control
当RabbitMQ发布消息速度快于消费速度或者系统资源不足时,RabbitMQ将降低或阻断发布消息速度,以免服务器资源饱满而宕机,可以通过rabbitmqctl和web管理页面查看连接的状态为flow ...
- sqlserver 时间测试
select * from GropBy where [date] BETWEEN '2010-10' and '2015-10' --从字符串转换日期和/或时间时,转换失败. select * fr ...
- 常用shell备份脚本
#!/bin/sh # File: /路径/mysql/backup_mydb.sh # Database info DB_NAME="szby" DB_USER="ro ...
- C语言基础 (10) 变量作用域,生命周期 内存结构
01 课程回顾 1.指针数组 注意: 对于数组来说,在使用sizeof的时候a和&a[0]是不一样的, 虽然以%x打印出来他们都是地址 2.值传递 int a; fun(a); int *** ...
- json字符串通俗的介绍
json 的本质就是字符串,按key:value这种键值对的格式定义的字符串 json就是传递javascript对象的语法,json只有两种结构,对象和数组,这两种结构嵌套和组合,来表示各种各样的数 ...