You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求适用于带模式切换的流过滤器的优化设计模式

带模式切换的流过滤器:设计模式与优雅实现咨询

核心场景

我常需处理字符流转换需求,核心逻辑是根据动态切换的模式调整转换规则,具体场景包括:

1. 方向映射

输入坐标元组,输出对应方向字符串:

INPUT STREAM(-1, 0)(0, 1)(0, 1)(0, 1)(0, -1)(0, 1)(0, 1)
OUTPUT STREAM"left""up""right""up""down""right""right"

2. 大小写切换

通过$字符触发大小写模式切换,输入输出对应关系:

INPUT:"ApPleS""$""BaNaNaS""$""BLACKberries""$""BlUeBeRrIeS""$""CaNtAlOuPe"
OUTPUT:"APPLES"切换模式"bananas""BLACKBERRIES"切换模式"blueberries"切换模式切换模式"CANTALOUPE"

3. 驼峰转下划线

将驼峰命名转换为下划线分隔的小写命名:

  • 输入:getUserInput() → 输出:get_user_input()
  • 输入:RedDeliciousApples → 输出:red_delicious_apples

4. 去除连续重复

规则:单个字符最多保留2次连续重复,多字词串仅保留一次:

INPUTOUTPUT
"Misssssssssissssssssippppppppppi""Mississippi"
"apple apple apple apple""apple"
"\n\n\n\n\n\n\n\n""\n\n"

当前实现痛点

我目前采用嵌套循环、大量if-else分支和布尔标志(如is_lowercase)实现,代码可读性差、冗余严重。例如大小写切换的初始实现:

import io

def eat_the_string(chars:str):
    strm = io.StringIO()
    is_lowercase = False
    for ch in chars:
        if ch == "$":
            is_lowercase = not is_lowercase
        else:
            if is_lowercase:
                print(ch.lower(), file=strm, sep="", end="")
            else:
                print(ch.upper(), file=strm, sep="", end="")
    return strm.getvalue()

我尝试用抽象基类重构了部分逻辑,将不同模式封装为独立类,但希望找到更通用的解决方案:

# 抽象基类重构示例
import io
from abc import ABC, abstractmethod

class PacAbstract(ABC):
    @abstractmethod
    def process_a_char(self, ch: str):
        pass

class PacModeLowercase(PacAbstract):
    def process_a_char(self, ch: str):
        return ch.lower()

class PacModeUppercase(PacAbstract):
    def process_a_char(self, ch: str):
        return ch.upper()

class PacMan(PacAbstract):
    def __init__(self, *, mode: str = "lower"):
        mode = mode.strip().lower()
        self._pac_mode = PacModeLowercase() if mode == "lower" else PacModeUppercase()

    def process_a_char(self, ch: str):
        return self._pac_mode.process_a_char(ch)

咨询问题

  1. 针对这类带动态模式切换的流过滤器,最适合的设计模式是什么?
  2. 如果暂时不确定模式名称,能否提供替代布尔标志的优雅实现伪代码?

内容的提问来源于stack exchange,提问作者Toothpick Anemone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:27:13