美文网首页
设计模式之:工厂+策略+模板

设计模式之:工厂+策略+模板

作者: Gin_714d | 来源:发表于2022-03-30 15:28 被阅读0次

    大量if else操作的优化:

    if a:
       ado
    elif b:
       bdo
    elif c:
       cdo
    

    思路:

    使用策略模式将ado,bdo,cdo操作合并到策略类中, 即抽象成为不同的策略类,通过不同的策略类,来实现对不同对象执行定制方法的效果

    class StrategyHandlerForA():
            def do
    class StrategyHandlerForA():
            def do
     class StrategyHandlerForA():
             def do
    

    使用工厂方法管理策略类

    def singleton(cls):
            cls_instance = {}
            def get_instance():
                   if cls not in cls_instance:
                          cls_instance[cls] = cls()
                    return  cls_instance[cls] 
            return get_instance
    
    
    @singleton
     class FactoryHandler():
                    
            def __init__(self):
                     self.map = {}
    
            def register(self, name, handler):
                    self.map[name] = handler # python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。
    
             def getInvokeStrategy():
                      return self.map[name]
    
    

    若需要抽象为不同的策略类,需要对策略接口进行统一的话,需要使用模板方法

    # 使用 python 元类解决这个问题
    
    class BaseMetaClass(type):
              
            def __new__(cls, name, bases, attrs):
                        # 在元类中自动注册到factory的单例中
            def do()
          
            def other_do()
                  raiseNotImplementError
    

    相关文章

      网友评论

          本文标题:设计模式之:工厂+策略+模板

          本文链接:https://www.haomeiwen.com/subject/jjtwjrtx.html