首页 > 解决方案 > 重构。试图让代码更优雅。需要设计模式

问题描述

无需赘述。我有这样的结构:

class someClass():
    def __init__(self, m):
        
        if m == 1:
            self.mode1()
        elif m == 2:
            self.mode2()
        elif m == 3:
            self.mode3()
        .....

        elif m == 10:
            self.mode10()

这是一个具有不同操作模式的类。将变量传递m给类我想设置运行类的相应方法的操作模式。有没有办法更优雅地做到这一点并摆脱“if”语句?对于这种特定情况,可能有一些设计模式吗?

标签: pythonoopdesign-patterns

解决方案


最终我使用了策略模式。感谢@Robin 的建议。

class Strategy(ABC):
    @abstractmethod
    def execute(self):
        pass   

class Context():
    def __init__(self, strategy: Strategy):
        self._strategy = strategy

    @property
    def strategy(self):
        return self._strategy

    @strategy.setter
    def strategy(self,  strategy: Strategy):
        self._strategy = strategy

    def executeStrategy(self):
        self._strategy.execute()

class mode0(Strategy):
    def execute(self):
        logging.info("MODE 0")
        
class mode1(Strategy):
    def execute(self):
        logging.info("MODE 1")
        
class mode2(Strategy):
    def execute(self):
        logging.info("MODE 2")
        
.....

然后

class someClass():
    def __init__(self, m):
        modesList = [mode0, mode1, mode2, mode3, mode4, mode5, 
                     mode6, mode7, mode8, mode9, mode10, mode11]      
    
        ctx = Context(modesList[m]())
        ctx.executeStrategy()
    

推荐阅读