有人可以帮助我了解子类中是否存在更好的方法(从常见策略列表中)实施注入策略。请在下面找到示例代码。
我不完全相信将这些策略包装为静态方法,并在基类中将策略的值提供为None。这是因为这里没有发生策略注入强制实施,并且使用继承来解决此问题看起来不自然/显而易见。
我能以更好的方式实现吗?
def strategy1():
print("strategy1")
def strategy2():
print("strategy2")
class Base():
strategy = None
class Child1(Base):
strategy = staticmethod(strategy1)
class Child2(Base):
strategy = staticmethod(strategy2)
class Child3(Base):
strategy = staticmethod(strategy1)
Child1.strategy()
Child2.strategy()
Child3.strategy()
我的主要要求是
答案 0 :(得分:1)
您可以改为使用将策略功能注入到其中的策略类:
import abc
def strategy1(self):
print("strategy1")
class AbstractClient(metaclass=abc.ABCMeta):
@abc.abstractmethod
def execute(self):
pass
class StrategizedClient(AbstractClient):
execute = strategy1
class PlanlessClient(AbstractClient):
pass
这需要python3,但是它将强制您的子类注入策略:
>>> StrategizedClient()
<strategy.StrategizedClient object at 0x10fd594a8>
>>> PlanlessClient()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class PlanlessClient with abstract methods execute