设计模式
责任链模式
在12306项目中,购票请求的校验逻辑通常可能非常复杂,包含多种不同的验证步骤,如用户身份验证、余额检查、购票数量限制、行程冲突检查等。传统的做法可能是将这些验证逻辑顺序地写在一个大方法中,这样不仅导致代码臃肿、难以维护,而且违反了开闭原则。每次需要添加新的验证步骤时,都需要修改现有的代码。
为了解决这个问题,我们可以使用责任链设计模式。责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递。每个处理者都可以对请求进行处理,也可以将请求传递给链中的下一个处理者。这样,你可以在不修改现有代码的情况下添加新的处理步骤,从而提高了代码的扩展性和可维护性。
在12306项目中,我们可以将购票验证逻辑拆分成多个独立的验证处理器(Handler),每个处理器负责一种或多种验证逻辑。然后,将这些处理器按照特定的顺序连接起来,形成一个责任链。当用户发起购票请求时,请求会沿着这个责任链进行传递,每个处理器都会根据自己的职责对请求进行验证。
策略模式
在12306项目中,列车余票缓存的更新是通过监听数据库的Binlog变更来实现的。Canal作为中间件,负责将Binlog的变更内容推送到指定的RocketMQ Topic中。而RocketMQ消费者则负责监听这些消息队列,以实时更新列车余票缓存。
当需要监听多个表时,为了高效地分发和处理这些Binlog变更数据,12306项目采用了策略模式。
对于每个需要监听的表,都实现了一个对应的策略类,这些类实现了策略接口。在每个策略类中,根据表的特点和业务需求,编写了具体的处理逻辑。
当Canal将Binlog的变更内容推送到RocketMQ Topic时,相关消费者会监听这些消息。它会根据消息中的表名称,通过策略模式找到对应的策略实现类,并调用其处理方法来处理Binlog变更数据。
如果未来需要监听更多的表,只需要添加新的策略类,并实现策略接口中的方法即可。符合开闭原则,提高了代码的可扩展性。