面向对象多态实现敏感词动态过滤的核心是定义统一wordfilter接口并让不同策略类实现它,如simplereplacefilter、prefixtreefilter和caseinsensitivefilter,通过配置、工厂或spring注入动态切换策略,支持灵活扩展与组合。

在初级脚手架中用面向对象多态实现敏感词动态过滤,核心是把“怎么过滤”这个行为抽象出来,让不同过滤策略可以互换,不改调用代码就能切换逻辑。这不是堆设计模式,而是为后续扩展留出空间——比如今天用简单替换,明天想加拼音模糊匹配,只需新增一个类。
定义统一的过滤接口
先声明一个顶层行为契约,比如叫 WordFilter:
- 它只暴露一个方法:
filter(String text) - 不关心内部怎么查、怎么替、是否用词典或自动机
- 所有具体过滤器都实现它,保证上层能一致调用
写几个具体实现类(体现多态)
多态的关键在于同一接口、不同实现。例如:
-
SimpleReplaceFilter:遍历敏感词数组,用
String.replaceAll()替换,适合小词库、开发初期 - PrefixTreeFilter:基于 Trie 树构建 DFA 状态机,一次扫描完成多词匹配,性能更好
- CaseInsensitiveFilter:包装其他过滤器,先转小写再过滤,实现大小写无关
它们都实现 WordFilter 接口,但内部逻辑完全独立——这就是多态的实质:调用方只认接口,不绑定具体类型。
运行时动态选择策略
不要在代码里写死 new SimpleReplaceFilter()。可以用以下方式解耦:
- 配置文件指定当前启用的类名(如
filter.class=PrefixTreeFilter),启动时反射加载 - 用工厂类根据业务场景返回对应实例(如评论走 PrefixTreeFilter,后台日志走 SimpleReplaceFilter)
- Spring 环境下直接用
@Qualifier注入不同 Bean,靠容器管理生命周期
保持过滤器可组合、易测试
多态不只是“换一个类”,更是为了灵活组装:
- 一个过滤器可以包装另一个(装饰者模式),比如先去 HTML 标签,再进敏感词过滤
- 每个实现类只专注一件事,单元测试只需 mock 输入、断言输出,不依赖外部资源
- 新增过滤规则时,只加类、改配置,不碰已有逻辑,避免牵一发而动全身











