可复用性和可维护性设计模式
创建型模式
- 工厂方法模式
- 意图:定义一个创建对象的接口,让子类决定实例化哪一个类,从而推迟实例化到子类。
- 使用场景:当一个类无法预测它需要创建的对象的类,或希望其子类指定对象时,以及需要委托给多个辅助子类中的一个时(11 Design Patterns for …)。
结构型模式
-
适配器模式
- 意图:将一个类的接口转换为客户希望的另一个接口,使得原本因接口不兼容而不能一起工作的类可以协同工作,通过用一个新的接口包装一个已有类(11 Design Patterns for …)。
-
装饰模式
- 动机:允许动态、灵活地为对象添加职责,而不是通过静态继承。
- 示例:带有各种扩展的堆栈,如UndoStack、SecureStack和SynchronizedStack。装饰模式允许任意可组合的扩展,而不会导致组合爆炸和大量代码复制(11 Design Patterns for …)。
- 实现:涉及创建一个实现被装饰对象接口的抽象装饰类,以及添加特定行为的具体装饰类(11 Design Patterns for …)。
行为型模式
-
策略模式
- 问题:存在多种算法用于完成任务,客户需要在运行时动态切换这些算法。
- 解决方案:定义一系列算法,分别封装,使它们可以在客户中互换。
- 示例:排序算法如冒泡排序、归并排序和快速排序。为这些算法提供一个接口并实现每个变体,使客户可以在运行时选择算法(11 Design Patterns for …)。
-
模板方法模式
- 意图:在抽象类中定义一个算法的骨架,允许子类提供某些步骤的具体实现。
- 使用场景:适用于存在一个高层次算法且某些步骤可以由子类不同实现的情况(11 Design Patterns for …)。
构建健壮性和正确性的原则
健壮性原则
-
防御性编程
- 概念:编写能够对意外输入和状态有弹性的代码,确保系统能继续正确运行。
- 技术:输入验证、优雅地处理异常、确保程序各部分保持不变性。
-
错误处理
- 方法:使用try-catch块、创建有意义的错误消息、记录错误以便后续分析。
正确性原则
-
断言
- 使用:验证程序假设,在开发期间及早捕获错误。断言不应用于处理运行时错误,而是用于测试和调试期间检查不变性。
-
代码审查和测试
- 代码审查:定期进行同行审查,以发现缺陷并提高代码质量。
- 单元测试:为单独的代码单元编写测试,确保每个部分在隔离中正确运行。
- 集成测试:验证应用程序使用的不同模块或服务能很好地协同工作。
-
形式化验证
- 定义:通过数学方法证明算法相对于形式化规范的正确性。
- 应用:适用于故障会产生严重后果的关键系统,如航空航天和医疗设备。
通过理解和应用这些设计模式和原则,软件开发人员可以创建不仅灵活和可维护,而且健壮和正确的系统,从而确保应用程序的长期成功和可靠性。