哈工大软件构造课程笔记第四章第三节

4.3 面向复用的设计模式为什么要使用可重用的设计模式?设计……使灵活性能够更改(可重用性)在修复旧问题时尽量减少引入新问题(可维护性)允许在初始交付之后交付更多的功能(可扩展)。设计模式:对软件设计中给定上下文中经常出现的问题的通用的、可重用的解决方案。OO设计模式通常显示类或对象之间的关系和交互,而不指定涉及的最终应用程序类或对象。除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大设计模式分类法创建型模式:关注对象创建的过程结构型模式:处理类或对象
摘要由CSDN通过智能技术生成

4.3 面向复用的设计模式

为什么要使用可重用的设计模式?
设计……
使灵活性能够更改(可重用性)
在修复旧问题时尽量减少引入新问题(可维护性)
允许在初始交付之后交付更多的功能(可扩展)。
设计模式:对软件设计中给定上下文中经常出现的问题的通用的、可重用的解决方案。
OO设计模式通常显示类或对象之间的关系和交互,而不指定涉及的最终应用程序类或对象。除了类本身,设计模式更强调多
个类/对象之间的关系和交互过程—比接口/类复用的粒度更大

设计模式分类法
创建型模式:关注对象创建的过程
结构型模式:处理类或对象的组合
行为类模式:描述类或对象交互和分配职责的方式。

1.结构模式

(1)适配器模式

适配器模式
意图:将类的接口转换为客户端期望获得的另一个接口。
解决类之间接口不兼容的问题
通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。

对象:将旧组件重用到新系统(也称为“包装器”)
加个“适配器”以便于复用

2种适配器设计模式
——继承
——委托
在这里插入图片描述

(2)装饰器模式

装饰器模式的激励示例
如果你想要堆栈数据结构的各种扩展…

  • UndoStack:一个堆栈,让您撤消以前的推或弹出操作
    SecureStack:需要密码的堆栈
  • SynchronizedStack:序列化并发访问的堆栈
    ——用每个子类实现不同的特性

任意可组合的扩展:

  • SecureUndoStack:一个需要密码的栈,并且允许你撤销以前的操作
  • SynchronizedUndoStack:一个序列化并发访问的栈,也允许你撤销以前的操作
  • SecureSynchronizedStack:……
  • SecureSynchronizedUndoStack:……

继承的局限性
结合继承层次结构
——组合爆炸
——大规模代码复制

装饰器
问题:你需要对单个对象进行任意或动态组合的扩展。
解决方案:将公共接口实现为要扩展的对象,添加功能,但将主要职责委托给底层对象。
以递归的方式实现

后果:
-比静态继承更灵活
-可定制的、内聚的扩展

decorator使用子类型和委托
在这里插入图片描述
接口:定义装饰物执行的公共操作

起始对象:在其基础上增加功能(装饰),将通用的方法放到此对象中

Decorator抽象类是所有装饰类的基类,里面包含的成员变量component 指向了被装饰的对象。

ConcreteDecorator类是可以添加特性的实际装饰类。您可以拥有任意数量的ConcreteDecorator类,每个类都代表一个可以添加的特性。

装饰与继承
▪Decorator在运行时组合特性
-继承在编译时组合特性
▪装饰器由多个协作对象组成
-继承产生一个单一的、明确类型的对象
▪可以混合搭配多种装饰
多重继承在概念上是困难的

java.util.Collections的修饰符
将一个可变列表变成一个不可变列表:

 static List<T> unmodifiableList
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值