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

2022-03-30  本文已影响0人  Gin_714d

大量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
上一篇下一篇

猜你喜欢

热点阅读