视频字幕
设计模式是解决软件设计中常见问题的可复用方案。由四位作者在1994年提出的23种经典设计模式被广泛应用于软件开发中。这些模式分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建机制,共有5种。结构型模式关注如何将类和对象组合成更大的结构,共有7种。行为型模式关注对象之间的职责分配和交互方式,共有11种。
创建型设计模式关注对象的创建机制,旨在以一种适合特定情况的方式创建对象。工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。例如,在图形绘制程序中,可以使用工厂方法来创建不同类型的图形。抽象工厂模式提供一个创建一系列相关对象的接口。单例模式确保一个类只有一个实例,并提供一个全局访问点,适用于配置管理器、日志记录器等场景。建造者模式将复杂对象的构建与表示分离。原型模式通过复制现有对象来创建新对象,适用于对象创建成本较高的情况。
结构型设计模式关注如何将类和对象组合成更大的结构。适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。例如,可以创建一个适配器类将新格式的音频数据转换成旧库能处理的格式。桥接模式将抽象部分与实现部分分离,使它们都可以独立变化。组合模式将对象组合成树形结构,使得用户对单个对象和组合对象的使用具有一致性。装饰模式动态地给对象添加额外的职责,比Java I/O流库中的各种装饰器。外观模式为子系统提供一个统一的入口。享元模式共享细粒度对象,节省内存。代理模式为其他对象提供一个替身或占位符以控制对这个对象的访问。
行为型设计模式关注对象之间的职责分配和交互方式。责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。例如,审批流程中,请假申请可能需要经过组长、经理、总监等多级审批。命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,并支持可撤销的操作。文本编辑器中的剪切、复制、粘贴等操作都可以被封装成命令对象。解释器模式定义语言的文法表示,并定义解释器来解释语言中的句子。迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。中介者模式用一个中介对象来封装一系列的对象交互。备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,以便以后恢复。
继续介绍行为型设计模式。观察者模式定义对象间的一种一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。例如,天气预报系统中,气象站收集天气数据,当数据更新时,通知所有订阅了天气信息的显示设备。状态模式允许一个对象在其内部状态改变时改变它的行为。策略模式定义一系列算法,把它们封装起来,并使它们可以互换。例如,排序算法可以根据需要切换不同的策略。模板方法模式定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。总结来说,设计模式提供了软件设计问题的通用解决方案,合理使用可以提高代码的可维护性和复用性,但过度使用可能导致代码过于复杂,应根据实际需求选择合适的设计模式。