1.设计模式
在软件构造的学习中,我们学习了几种设计模式,这里做出一个汇总和分类。
- 创建型模式
- 结构型模式
- 行为类模式
2.创建型模式
(1).工厂方法模式
当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。
3.结构型模式
(1).适配器模式
将某个类/接口转换为client期望的其他形式。
通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
(2).装饰器模式
装饰者模式用每个子类实现不同的特性,在我们需要大量有重复属性但是同时又有特定属性的时候,使用单纯地继承委托等方法可能会造成组合爆炸、大量代码重复等等问题。而装饰器模式能很好地解决这个问题。
其问题是为对象增加不同侧面的特性,解决方式是对每一个特性构造子类,通过委派机制增加到对象上,其工作原理是以递归的方式实现,接口:定义装饰物执行的公共操作,起始对象,在其基础上增加功能(装饰),将通用的方法放到此对象中。Decorator抽象类是所有装饰类的基类,里面包含的成员变量component指向了被装饰的对象。
3.行为类模式
(1).策略模式
有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里。
为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
(2).模板模式
有些问题做事情的步骤一样,但具体方法不同。
共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。使用继承和重写实现模板模式。
(3).迭代器模式
客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型。
也就是说,不管对象被放进哪里,都应该提供同样的遍历方式。
Iterator pattern:让自己的集合类实现Iterable接口,并实现自己的独特Iterator迭代器(hasNext, next, remove),允许客户端利用这个迭代器进行显式或隐式的迭代遍历。
(4).访问者模式
对特定类型的object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类。
本质上:将数据和作用于数据上的某种/些特定操作分离开来。
为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下通过delegation接入ADT。