软件构造之面向复用的设计模式

在临近期末考试之际,编写博客进行相关内容的回顾与复习
设计模式除了类本身更强调多个类/对象之间的关系和交互过程。
1.适配器模式
将某个类/接口转换为client期望的其它形式,解决类之间接口不兼容的问题,通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
当希望将一个类转换为满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实一个抽象类Adapter现新的接口即可。
当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个新类,持有原类的一个实例,在新类的方法中,调用实例的方法即可。
当不希望实现一个接口中的所有方法时,可以创建一个抽象类Adapter,实现所有方法,编写其他类的时候,继承抽象类即可。
2.装饰器模式
装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式创建一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
为对象增加不同侧面的特性,对每一个特性构造子类,通过委派机制增加到对象上。在起始对象的基础上增加功能,将通用的方法放入到此对象中。
Decorator抽象类是所有装饰类的基类,里面包含的成员变量component指向了被装饰的对象。
3.外观模式
客户端需要通过一个简化的接口来访问复杂系统内的功能。提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用,便于客户端学习使用。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统方法的委托调用。
优点:减少系统相互依赖,提高灵活性,提高安全性
4.策略模式
有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里。为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
优点:算法可以自由切换,避免使用多重条件判断,扩展性良好。
5.模板模式
在模板模式中,一个抽象类公开定义了执行它的方法/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
优点:封装不变部分,扩展可变部分。 提取公共代码,便于维护。行为由父类控制,子类实现。
使用场景: 有多个子类共有的方法,且逻辑相同。 重要的、复杂的方法,可以考虑作为模板方法。
6.迭代器模式
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。:、让自己的集合类实现Iterable接口,并实现自己的 独特Iterator迭代器(hasNext, next, remove),允许客户端利用这 个迭代器进行显式或隐式的迭代遍历。
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。
优点: 它支持以不同的方式遍历一个聚合对象。 迭代器简化了聚合类。 在同一个聚合上可以有多个遍历。 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值