需求场景
在Java中,经常需要将一类对象放到List、Set、Map等容器中,而且通常需要对容器中的对象进行遍历访问。那么如何实现对这些容器的遍历呢?当然,每个容器本身都提供了遍历的方法。但是这些方法是不统一的,客户端的使用变得麻烦。
有一个报表打印程序,用户规定必须要打印表头、正文、表尾三个部分。
一般思路:
1 | public class Report { |
1979年,建筑师亚历山大编写了《建筑的永恒之道》,这本书阐述了建筑与规划的新观点。作者通过对当代建筑的研究发现:优秀的建筑中,总是存在着一些相似之处。如果能够找出这些优秀建筑的特征,就能够找到这些建筑是采用了哪些方法,如何设计才变得优秀的,从而也就能够客观评价一个建筑设计的好坏。通过找出并掌握这些优秀建筑的设计方法,建筑师就可以把这些方法复制到其他的建筑设计中,从而设计出同样优秀的建筑来。
建筑行业中存在的情况和软件行业存在的情况类似。在软件行业,是否也能够从那些优秀的软件中,找到一些相同的特征、优秀的设计方法,从而使软件开发人员能够掌握这些方法,并将其应用到其他的软件开发中,从而也开发出同样优秀的软件呢?
为了探讨这个问题,很多软件开发人员开始了这方面的研究,其中影响最大的文献是《设计模式》一书,该书的四个作者被称为GoF或Gang of Four。这本书总结了人类历史上软件开发的经验,给出了描述模式的一些特征,并提炼出用于指导软件设计的23种模式和一些面向对象的设计方法。