软件模式概述
设计模式已广泛应用于面向对象系统设计和开发,成为面向对象技术的一个重要组成部分。当人们在特定环境下遇到特定类型的问题时,可以采用他人已使用过的一些已经成功的解决方案,既降低了分析、设计和实现的难度,也使得系统具有更好的可重用性和灵活性
软件模式
设计模式起源于建筑领域,模式描述了解决问题的核心方法,通过这种方式,我们可以无数次地重用那些已有的解决方案,无须重复相同的工作。
模式可以应用于不同的领域,软件模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照模板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,在软件生存期的每一个阶段都存在着一些被认同的模式。
设计模式的定义
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用这些设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式的基本要素
设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和其他相关设计模式,其中关键元素包括以下四个方面
模式名称
通过一两个词来描述模式的问题、解决方案和效果,以更好地理解模式并方便开发人员之间的交流。
问题
描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因。有时候问题描述可能会包含使用该模式时必须满足的一系列先决条件。
解决方案
描述了设计模式的组成部分,以及这些组成部分之间的相互关系,各自职责和协作方式。解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或者对象)来解决这个问题。
效果
描述模式应有的效果以及在使用模式时应权衡的问题。效果主要包含模式的优缺点分析,因此需要综合考虑模式的效果。
设计模式的分类
设计模式一般有两种分类方式
根据目的分类
创建型模式
主要用于创建对象,GoF提供了五种创建模式,分别是工厂方法模式(Factory Method)、抽象工厂模式(Abstract Method)、建造者模式(Builder)、原型模式(Prototype)和单例模式(Singleton)
结构型模式
主要用于处理类或对象的组合,GoF提供了七种结构型模式,分别是适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(proxy)
行为型模式
用于描述类或对象怎样交互和怎样分配职责,GoF提供了十一种行为型模式,分别是职责链(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)
根据范围分类
类模式
类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,属于静态的。
对象模式
处理对象间的关系,这些关系在运行时刻发生变化,更具动态性。