iOS面试一战到底
上QQ阅读APP看书,第一时间看更新

2.1 设计模式概述

“设计模式”一词最初并非出现在软件设计中,而是建筑学领域中常用的术语。1995年出版的《设计模式:可复用面向对象软件的基础》一书最早开始系统地介绍和总结软件开发中的设计模式,取得了软件设计模式的突破。到目前为止,软件开发领域依然遵守经典的23种设计模式。本章将完整地对这23种设计模式进行介绍。

本章内容的相关代码均采用最新版本的Swift语言编写:一方面,Swift语言作为Apple官方推荐的开发语言,应用越来越广泛;另一方面,Swift语言是非常现代化的一门语言,其语言的设计本身就包含了许多设计模式的思想,在学习时我们可以更好地对Swift语言的巧妙设计进行体会。

2.1.1 初识设计模式

对于软件设计模式,很难下一个完整的定义。我们可以从要实现的效果来理解设计模式。从根本上讲,设计模式是一套被反复使用、多次总结、从代码设计经验中总结出的软件设计方法。其是软件工程师前辈对编码经验的一种总结,目的是提高代码的可重用性、可读性和可靠性等。使用设计模式的目的是使得代码的组织更加结构化,改善代码的质量。下面列举使用设计模式所要达到的目标:

(1)使得代码的组织结构更加合理,逻辑更加清晰。

(2)提高代码的可重用性。

(3)提高代码的可读性。

(4)提高代码的可维护性。

(5)提高代码的扩展性和灵活性。

(6)使程序的设计更加标准化,代码的编写更加工程化,提高开发效率。

设计模式也是面向对象编程思想的一种实际应用。在学习设计模式时,也可以提高我们对面向对象编程思想的理解。在学习设计模式时,要重点抓住下面几个方面:

1.要解决的问题场景

设计模式不是解决独立的问题(是算法要处理的事情),而是要解决某个问题场景。在学习设计模式时,首先要考虑此设计模式是用在什么场景下的、拥有怎样的应用环境。

2.设计模式提供的解决方案

每一种设计模式都提供了一种编程思想与问题场景的解决方案,每个设计模式都不是万能的,其一定是适用于某个场景的解决方案,同时它又一定不只是解决单一的某个场景,而是提供了一种思路。在学习设计模式时,要深刻理解其所提供解决方案的思路。

3.使用设计模式所达到的效果

在学习设计模式时,要明确该设计模式要达到的效果。并非所有问题都适合使用设计模式,在不合适的场景使用设计模式反而适得其反。在选择设计模式时,要分析其所能达到的效果,从时间和空间上进行衡量。

2.1.2 设计模式的分类

本章所介绍的23种设计模式,从作用上可以分为3类,即创建型模式、结构型模式和行为型模式。

创建型模式用来描述怎样创建对象。其核心是将对象的创建与使用分离,包括单例模式、原型模式、工厂方法模式、抽象工厂方法模式、建造者模式。

结构型模式用来描述怎样组织类和对象,包括代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式和组件模式。

行为型模式用来描述类或对象的行为,包括模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式和解释器模式。

设计模式根据其作用的目标不同又可以分为类模式与对象模式。类模式用来布局类与子类的关系,其中包括工厂方法模式、适配器模式、模板方法模式和解释器模式。其余的设计模式用于描述对象之间的关系,都属于对象模式。