软件构造(四)

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

子类型的行为:

  1. 子类型可以增加方法,但不可删
    2.子类型需要实现抽象类型 (接口、抽象类)中所有未实现的方法
    3.子类型中重写的方法必须有相同或子类型的返回值或者符合co-variant的参数
    4.子类型中重写的方法必须使用同样类型的参数或者符合contra-variant的参数(此种情况Java目前按照重载overload处理)
    5.子类型中重写的方法不能抛出额外的异常

协变、反协变
协变:父类型到子类型,由抽象越来越具体。(包括返回值类型,异常的类型)
反协变(逆变):父类型到子类型,由具体越来越抽象。(包括返回值类型,异常的类型)

泛型中的LSP
泛型不是协变的
类型擦除:类型参数的类型信息在代码编译完成后擦除,就是类型擦除,擦除之后,相当于程序中只有基本的类、接口、方法

Delegation委派:一个对象请求另一个对象的功能,委派是复用的一种常见形式
(很多设计模式将继承和委托结合使用)
用委托替换继承:1.如果子类只需要复用父类中的一小部分方法,可以不需要使用继承,而是通过委派机制来实现
2. 一个类不需要继承另一个类的全部方法,通过委托机制调用部分方法,从而避免继承大量无用的方法

几种设计模式:
adapter适配器模式
将某个类/接口转换为client期望的其他形式
通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。

Decorator 装饰器模式
功能:为对象增加不同侧面的特性
实现方案:对每一个特性构造子类,通过委派机制增加到对象上

Facade 外观模式
功能: 客户端需要通过一个简化的接口来访问复杂系统内的功能
实现方案;提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用

Strategy 策略模式
功能:同一个任务有不同的实现方案,客户端可以在执行过程中具体选择哪一种设计方案
实现方法:设计一个接口,不同的实现方案都可以implements这个接口
使用委派delegation模式——黑盒框架设计模式

Template 模板模式
适用条件:做事情的步骤一样,但具体方法不同
实现方法;共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现
使用继承和重写实现模板模式——白盒框架

Iterator迭代器模式
适用条件:用户需要用一个统一的策略来获得某一容器内的所有元素,而不用管这个容器的类型
实现方案;迭代。让自己的集合类实现Iterable接口,并实现自己的独特Iterator迭代器(hasNext, next,remove),允许客户端利用这个迭代器进行显式或隐式的迭代

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值