可复用设计模式(1)

面向可理解性的构造

代码的可理解性

如何编写易于理解的代码

遵循命名规范
限制代码行的最大长度,文件的最大LOC
足够的注释
代码有好的布局:缩进,空行,对齐,分块等。
避免多层嵌套,增加复杂度

可复用性编程

什么是软件复用

软件复用是使用现有软件组件实施或更新软件系统的过程

软件复用的两个观点

1.面向复用编程:开发出可复用的软件
2.基于复用编程:利用已有的可复用软件搭建应用系统

复用的好处

1.降低成本和开发时间
2.复用的代码经过测试,可靠,稳定。
3.产出标准化,在不同应用中保持一致。

复用的类型

白盒复用:源代码可见,可修改和拓展
黑盒复用:源代码不可见,不能修改

可复用实现的级别

源代码级别的复用

模块级别的复用:类,抽象类,接口

复用类:
源码并非是必要的,可能只需要类文件或jar
只需要将这个类加入到类路径
可以使用工具javap获得一个类的public方法

复用的方法:继承和委托

继承
1.类扩展了现有类的属性和行为
2.可能会Override现有的行为
3.通常需要在实施之前设计继承层次结构
委托
委托是简单的将一个对象连接到另一个对象上,使另一个对象获得这个对象方法的子集
如下图所示就是委托

在这里插入图片描述

库级别的复用:

方法:library,framework
library:
库定义:一组提供可复用功能的类和方法
framework:
框架定义:一组具体类,抽象类及其之间的连接关系
作为主程序加以执行,执行过程中调用开发者所写的程序。

对可复用性的外部观察

Type Variation 类型可变
1.能够复用的部分应该类型参数化,以适应不同的数据类型
2.复用的部分应该一般化
3.适用不同的类型,且满足LSP
Implementation Variation 实现可变
ADT 有多种不同的实现,提供不同的representation和abstract function,但具有同样的specification,从而可以适用不同的应用场景
功能分组
提供完备的细粒度操作,保证功能的完整性,不同场景下复用不同的操作
RI
内部实现可能会经常变化,但客户端不应受到影响。
Factoring Out Common Behaviors:
将共同的行为抽象出来,形成可复用实体。

白盒框架和黑盒框架

白盒框架
1.通过继承和动态绑定实现可扩展性
2.通过继承框架基类并重写预定义的hook方法来扩展现有功能。
3.通常使用模板方法模式等设计模式,来覆盖hook方法。
黑盒框架
1.通过为可插入框架的组件定义接口来实现可扩展性

2.通过定义符合特定接口的组件来复用现有功能。
3.这些组件可通过委派与框架集成。

设计可复用的软件

设计可复用的类–LSP

行为子结构

子类型多态:客户端可用统一的方式处理不同类型的对象

Animal a = new Animal();
Animal c1 = new Cat();
Cat c2 = new Cat();

在使用a的场景都可以用c1,c2不会有什么问题
在java的静态类型检查中,编译器强调了一些规则:
1. 子类型可以增加方法但不可以删
2. 子类型需要实现抽象类型中的所有未实现方法
3. 子类型中重写的方法必须有相同或子类型的返回值
4. 子类型中重写的方法必须使用同样类型的参数。
5. 子类型重写的方法不能抛出额外的异常

复合继承原则

定义:类应当通过它们之间的组合达到多态表现和代码复用,而不仅仅是从基础类或父类继承。

委派的类型

1.临时性委派:调用类里的方法,而不将其作为属性。
2.永久性委派:类中有其他类的实例来作为一个变量。
3.更强的委派:组合,将一些简单的对象组合成为一个更大的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇迹飞鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值