特别是在单元测试中,我们使用这种“设计模式”,我称之为“从类级别获取类”
在框架测试.py公司名称:
class FrameWorkHttpClient(object):
....
class FrameWorkTestCase(unittest.TestCase):
# Subclass can control the class which gets used in get_response()
HttpClient=FrameWorkHttpClient
def get_response(self, url):
client=self.HttpClient()
return client.get(url)
在我的测试.py公司名称:
^{pr2}$方法get_response()
从self
获取类,而不是通过导入它。这样子类可以修改类并使用不同的HttpClient
。在
这个(从类级别获取类)“设计模式”的名称是什么?在
这是“控制反转”还是“依赖注入”?在
您的代码与Factory method pattern非常相似。唯一的区别是您的变量使用工厂类变量而不是工厂方法。在
我并不完全是一个设计模式的“大师”,但对我来说,它看起来有点像模板方法模式。您正在基类中定义
get_response
方法的“骨架”,并将一个步骤(定义要使用的类)留给子类。在如果这可以被认为是模板模式,这是一个控制反转的例子。在
我相信这与使用Python特定语法实现的简单多态性具有相同的目的。不是让虚拟方法返回新实例,而是将实例类型存储为类/子类中的“可重写变量”。在
这可以重写为一个虚拟方法(抱歉,我不太精通Python,所以这只是伪代码)
然后在子类中,更改方法的实现以返回不同的类型:
^{pr2}$如果你想称之为模式,我会说它类似于Strategy GoF pattern。在您的特定案例中,被抽象出来的算法是特定HttpClient实现的创建。在
再想一想——正如你所说,这确实可以看作是国际奥委会的一个例子。在
相关问题 更多 >
编程相关推荐