设计模式之共同点

1、起始结构

共同点的设计模式:单例模式、观察者模式、责任链模式
共性解释:起始结构描述模式是从一个点还是多个点发起操作,或是需要多个组件协作完成。
提高了什么:单点模式增强系统的控制力和一致性,多点协同模式支持灵活的系统组件协作和并发处理。
缺点:单点可能导致瓶颈;多点协作的复杂性较高,需要资源协调。
电商流程场景举例分析:

  • 单例模式:用于全局管理购物车系统的商品 ID 分配,确保每个商品在购物车中的唯一性和一致性,避免同一用户重复添加同一商品。
  • 观察者模式:在用户下单后,系统会通知仓库、物流、支付模块等多个系统,确保订单处理的各环节能够及时同步,减少人工干预。
  • 责任链模式:订单处理从用户下单到最终确认过程中,经过库存检查、支付验证、物流准备等多个环节,每个模块负责自己的任务,并依次处理。

2、封装变化

共同点的设计模式:策略模式、工厂模式、状态模式
共性解释:通过封装变化点保持系统的稳定性,降低代码耦合度。
提高了什么:提高系统的扩展性,便于在不影响其他部分的情况下增加或修改功能。
缺点:封装过多的变化点可能导致复杂度过高,维护成本增加。
电商流程场景举例分析:

  • 策略模式:用于电商平台的优惠策略计算,如满减、打折等促销活动。用户在结算时根据不同的促销策略计算最终价格,提高了促销方案的灵活性。
  • 工厂模式:在支付流程中,创建不同的支付对象(如支付宝、微信支付),当增加新的支付方式时,只需扩展工厂即可,保持系统的开放性和灵活性。
  • 状态模式:订单从待支付到已支付、待发货等不同状态的转变过程,各个状态封装在对象中,方便管理不同状态下的业务逻辑。

3、职责分离

共同点的设计模式:职责链模式、代理模式、中介者模式
共性解释:通过分解复杂逻辑,将任务分配到各自职责中,从而降低耦合度。
提高了什么:代码的可读性和可维护性,便于模块之间的独立性和易于调试。
缺点:增加的类和接口可能导致结构复杂,增加维护成本。
电商流程场景举例分析:

  • 职责链模式:在电商订单处理中,用户下单后需要进行库存检查、支付验证、物流安排,每个模块独立负责各自的处理流程,职责明确。
  • 代理模式:用于控制用户对订单的访问权限。普通用户只能查看自己的订单信息,管理员则可以修改和取消订单,增强系统的安全性。
  • 中介者模式:在用户结算时,支付模块、物流模块和库存模块的交互通过中介者协调,减少模块间的直接耦合,简化系统结构。

4、组合与复用

共同点的设计模式:组合模式、享元模式、装饰者模式
共性解释:通过结构化的方式将对象组合,使其具备高复用性,适应不同上下文的需求。
提高了什么:模块化设计和复用性,简化了代码,减少重复。
缺点:结构复杂性增加,需精心组织,可能增加维护成本。
电商流程场景举例分析:

  • 组合模式:用于商品分类结构,商品可以按类别进行组合展示,用户可以通过点击不同分类浏览各类商品,树状结构使数据管理更方便。
  • 享元模式:在商品详情页中,多次显示相同商品的图片时共享相同的图片对象,减少系统内存消耗,提高系统性能。
  • 装饰者模式:在商品展示页面为商品动态添加促销信息,如打折标签、限时优惠等,提升用户的购物体验。

5、接口一致性

共同点的设计模式:外观模式、适配器模式
共性解释:标准化不同模块的接口,隐藏复杂性,对外提供一致的接口。
提高了什么:简化了系统的对外使用,方便模块之间调用,降低使用复杂性。
缺点:增加的层次可能导致性能开销,且接口变化会影响整体结构。
电商流程场景举例分析:

  • 外观模式:在订单系统中,将库存检查、支付处理、物流查询等接口整合成一个对外的结算接口,简化了用户调用操作。
  • 适配器模式:当接入第三方支付服务(如国外支付系统)时,通过适配器将其转换为系统内统一的支付接口,便于统一管理和操作。

6、行为的灵活扩展和约束

共同点的设计模式:命令模式、备忘录模式
共性解释:灵活扩展对象行为,支持撤销和恢复,提升操作的灵活性。
提高了什么:系统的回溯性和操作灵活性,使用户操作更可控。
缺点:增加存储需求和操作开销,特别在需要多次操作记录时。
电商流程场景举例分析:

  • 命令模式:用于用户的购物车操作记录,如增加或删除商品,可以支持用户撤销操作,提升用户的购物体验。
  • 备忘录模式:用户在修改订单信息时保存当前状态,如果操作出错或用户反悔,可以回到之前的订单状态,确保数据的安全性和一致性。

7、数据与逻辑的分离

共同点的设计模式:观察者模式、模板方法、访问者模式
共性解释:将数据更新与逻辑处理解耦,便于信息的传递和数据扩展。
提高了什么:数据更新的灵活性和系统扩展性,便于不同模块的同步处理。
缺点:依赖关系较强,可能增加系统复杂度,尤其在顺序性要求较高的情况下。
电商流程场景举例分析:

  • 观察者模式:订单状态更新后,通知用户、物流系统和库存管理模块,保证信息的同步性和一致性。
  • 模板方法:定义通用的订单处理流程,不同的订单类型可以在特定环节进行个性化处理,如预售订单和普通订单的区别处理。
  • 访问者模式:对不同类型的订单进行数据统计和分析,生成不同报表,方便财务和运营部门的使用。

8、性能优化

共同点的设计模式:享元模式、代理模式、缓存模式
共性解释:通过减少冗余和提升资源利用率优化性能。享元模式可以共享重复对象,代理模式允许延迟加载或访问控制,缓存模式则减少重复计算或重复请求。
提高了什么:降低内存占用、提升系统响应速度、优化资源消耗。
缺点:可能增加代码复杂度和管理难度,尤其在缓存失效处理和代理延迟加载的同步性上。
电商流程场景举例分析:

  • 享元模式:对重复出现的产品图片、规格等静态数据使用享元模式共享,减少内存占用,提升展示效率。
  • 代理模式:在订单系统中,当订单详情包含大量关联数据时,可通过代理模式延迟加载订单历史,减少系统初始加载的压力。
  • 缓存模式:对热销商品信息和用户浏览记录进行缓存,减少数据库查询次数,优化用户体验。

9、灵活扩展

共同点的设计模式:装饰者模式、桥接模式、组合模式
共性解释:通过扩展结构实现系统的灵活性和动态调整功能。装饰者模式为对象动态添加行为,桥接模式在功能和实现间建立独立的桥梁,组合模式在树状结构中扩展子节点。
提高了什么:系统的功能扩展性和动态调整能力,减少耦合度。
缺点:代码结构复杂度提升,维护较繁琐,特别是在处理深层嵌套或多层次扩展时。
电商流程场景举例分析:

  • 装饰者模式:用于动态增加商品的促销活动或折扣信息,用户在浏览商品时能看到实时折扣,提高灵活性。
  • 桥接模式:用于支付系统对接不同支付服务商,为不同支付渠道(如信用卡、电子钱包)建立独立实现,便于扩展新支付方式。
  • 组合模式:商品分类和子分类结构的展示,用户可浏览各类商品的子类别,使浏览结构更清晰易懂。

10、调试与可测试性

共同点的设计模式:代理模式、命令模式、模板方法
共性解释:简化调试与测试过程,便于系统模块的独立测试。代理模式通过代理对象可以插入日志和监控,命令模式将操作封装便于测试,模板方法通过结构化模板便于测试步骤的复用。
提高了什么:提高系统的可维护性和测试便捷性,增强系统稳定性。
缺点:增加实现难度,可能需要更多样板代码。
电商流程场景举例分析:

  • 代理模式:对用户登录和订单操作进行监控,代理模式可以在操作前后记录日志,便于问题追踪和调试。
  • 命令模式:用户购物车的增删操作可以逐条记录和测试,确保操作的正确性,提高稳定性。
  • 模板方法:在订单处理流程中定义通用流程模板,对支付和物流等模块的独立步骤可单独测试。
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...