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

设计模式:针对软件设计中给定环境中经常出现的问题的通用的、可重用的解决方案。除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的力度更大。
面向复用的设计模式主要有以下几种:

结构模式

(通过改变类的结构,使类具有新的特性。)

适配器模式

当用户希望的接口形式(参数形式)和已经实现的方法接口(可复用的方法)不匹配时,需要设计一个适配器接口,适配器中所有API的格式都符合用户的要求,在适配器接口的具体实现中调用可复用的方法即可。

装饰器模式

适用场景:一个基础类想要扩展另外的特性时(多个,如果使用直接使用继承,因为会组合爆炸,而生成复杂的继承树,且工作量很大,会有较多的重复代码,不符合可复用性软件的需求。),需要使用装饰器模式(继承+委托),可以实现需要增加的特性的任意组合。
实现方法:创建一个装饰类,有一个指向基础类的引用,里面所有的方法都是通过委托给基础类来实现的。然后通过继承装饰类来实现各个需要增加的功能。
在这里插入图片描述
在使用时,因为装饰类中是其他类的引用,所以可以用添加了功能1的类作为功能2的类中的引用,即可实现层层套用装饰了。
在这里插入图片描述

门面模式

提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用。

行为模式

(如何在类中的多个行为之间进行切换。)

策略模式

适用场景:有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里。
实现方法:为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
在这里插入图片描述

模板模式

实现算法的步骤相同,但具体的实现方法不同,例如,设计framework时的白盒框架。实现方法一般为继承父类,父类一般为抽象类,共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。使用继承和重写实现模板模式。(其中固定的方法可以用final关键字来修饰。)

迭代器模式

适用场景:客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型。当有需求设计一个集合类时,同时应该实现该集合类的迭代器。
迭代器模式的实现方法:设计集合类的接口,继承Iterable接口,

public interface Iterable<T>{
 	...
 	Iterator<T> iterator();
 }

这样设计的集合类就能生成属于每个实例对象的迭代器了,在该方法中,会把该实例的集合引用传递给迭代器。然后实现自己的独特Iterator 迭代器(hasNext, next, remove) ,允许客户端利用这个迭代器进行显式或隐式的迭代遍历:

public interface Iterator<E> {
	boolean hasNext();
	E next();
	void remove();
}

显示遍历:Iterator<E> iter = collection.iterator(); while(iter.hasNext()) { … }
隐式遍历:for (E e : collection) { … }

创建模式

(之后再补)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值