【设计模式】1.设计模式概述

设计模式是解决常见软件设计问题的典型解决方案,它们可以帮助开发者更高效、灵活地编写代码,并增强系统的可维护性。以下是一些在实际开发中非常有用的设计模式,按分类进行介绍:

一、创建型设计模式

1. 单例模式(Singleton)

作用:确保一个类只有一个实例,并提供一个全局访问点。
场景:适用于需要全局唯一实例的场景,如数据库连接池、配置管理类、线程池等。

优点

  • 控制实例数量,减少内存消耗。
  • 全局访问点,提供统一的管理。

2. 工厂方法模式(Factory Method)

作用:定义一个用于创建对象的接口,但让子类决定实例化哪个类。
场景:当一个类的实例化依赖于子类的决策时,工厂方法模式可以用于解耦对象的创建过程。

优点

  • 实现了创建对象的分离和封装,易于扩展。
  • 可以通过子类控制具体对象的创建逻辑。

3. 抽象工厂模式(Abstract Factory)

作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
场景:适合多个对象组合使用且对象族之间相互关联的场景,如创建一整套跨平台的 UI 组件(按钮、文本框等)。

优点

  • 易于扩展对象族,同时保证类间的一致性。
  • 遵循开放封闭原则,新增产品族容易。

4. 原型模式(Prototype)

作用:通过复制已有的对象来创建新的对象,而不是直接实例化类。
场景:适用于创建对象成本较高或复杂,且需要频繁创建的场景,例如深拷贝复杂对象。

优点

  • 避免直接实例化,性能更高。
  • 适合对象的动态变化和复杂的创建需求。

二、结构型设计模式

5. 适配器模式(Adapter)

作用:将一个类的接口转换成客户希望的另一种接口,使得原本由于接口不兼容而不能一起工作的类能够协同工作。
场景:当系统中存在多个不兼容的类时,可以通过适配器模式让它们能够一起协同工作。

优点

  • 提高了类的复用性和灵活性。
  • 客户端无需修改代码就可以使用新接口。

6. 装饰器模式(Decorator)

作用:动态地给对象添加职责,不通过修改类而扩展其功能。
场景:当需要为对象添加功能,且这些功能可以在不修改对象本身的情况下动态添加或移除时。

优点

  • 比继承更灵活,可以在运行时增加功能。
  • 遵循开放封闭原则,可以扩展对象行为。

7. 外观模式(Facade)

作用:为子系统中的一组接口提供一个一致的高层接口,使子系统更容易使用。
场景:当一个复杂的系统有多个子系统时,外观模式可以提供一个简洁的接口供外部调用。

优点

  • 降低了系统的复杂性,外部代码与子系统的耦合度降低。
  • 隐藏子系统的细节,提供简单的接口。

8. 代理模式(Proxy)

作用:为其他对象提供一种代理以控制对这个对象的访问。
场景:常用于懒加载、远程代理、保护代理等场景,例如访问远程服务或控制对象的访问权限。

优点

  • 通过代理可以进行额外的处理(如权限控制、缓存等)。
  • 隐藏目标对象的复杂性,提供对对象的控制。

三、行为型设计模式

9. 策略模式(Strategy)

作用:定义一系列算法,将每一个算法封装起来,并使它们可以互相替换。
场景:当一个系统有多种算法或行为需要根据不同条件进行切换时,使用策略模式可以避免繁琐的 if-else 逻辑。

优点

  • 算法独立封装,易于替换和扩展。
  • 遵循开闭原则,添加新策略不需要修改现有代码。

10. 观察者模式(Observer)

作用:定义对象间的一种一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。
场景:适用于多个对象之间的联动更新场景,如事件驱动系统、通知系统、GUI 事件处理。

优点

  • 解耦了观察者和被观察者,灵活扩展。
  • 实现了对象间的动态依赖关系,松耦合。

11. 模板方法模式(Template Method)

作用:定义一个操作中的算法骨架,而将某些步骤延迟到子类中去实现。
场景:当多个类有相似的逻辑流程,但细节部分不同时,可以使用模板方法来复用公共流程。

优点

  • 代码复用,公共逻辑抽象为父类。
  • 子类可以根据具体需求重写部分步骤,灵活实现定制化。

12. 命令模式(Command)

作用:将请求封装成对象,以便用不同的请求、队列或者日志来参数化其他对象。
场景:适合处理需要撤销、恢复操作的场景,如事务管理、UI 控件的操作记录。

优点

  • 提供了撤销、恢复、排队等高级功能。
  • 解耦了请求发送者和执行者,增加灵活性。

13. 状态模式(State)

作用:允许对象在内部状态改变时,改变它的行为。
场景:当对象需要根据其内部状态进行不同的行为处理时,状态模式非常有用,如文档状态的不同操作、订单状态管理。

优点

  • 状态转换清晰,易于维护。
  • 状态逻辑封装到独立的类中,符合单一职责原则。

14. 责任链模式(Chain of Responsibility)

作用:将请求沿着处理者链传递,直到有一个处理者处理它。
场景:适合请求处理流程化的场景,如审批流程、事件处理机制。

优点

  • 解耦了请求发送者与处理者。
  • 灵活添加或修改处理步骤,满足动态需求。

四、综合使用

在实际开发中,设计模式往往不是单独使用的,多个模式可以结合应用。例如:

  • MVC(Model-View-Controller) 是多种模式的组合,View 和 Controller 可以使用 观察者模式,Controller 可以使用 策略模式 处理不同的业务逻辑。
  • 工厂模式单例模式 常结合使用,工厂用于创建对象,而确保工厂对象本身是单例。

结语

设计模式提供了经过验证的解决方案,帮助开发者在软件设计中避免重复问题,提高代码的可维护性、可扩展性和可读性。掌握设计模式不仅能够编写出更优雅的代码,还能有效应对各种复杂的开发需求。在日常开发中,了解每种模式的适用场景和优缺点,根据实际需求选择合适的模式,才能真正发挥设计模式的价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sulifer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值