我有一个类Library
,它定义了一些方法 - 抽象数据。然后,该类继承到实际定义数据的类A
或B
中。目的是将Library
重用于不同的底层数据存储模型。
在Python中:
class Library:
def meth1(self, ...):
return ...
def meth2(self, ...):
return ...
def compute_property1(...):
return ...
def compute_property2(...):
return ...
class B(Library):
property1 = property(lambda s: s.compute_property1()) #plain property
property1 = property(lambda s: s.compute_property2()) #plain property
class A(Library):
property1 = my_property_with_fancy_caching_and_compression_and_stuff(....)
property1 = my_property_with_fancy_caching_and_compression_and_stuff(....)
这种模式是一种众所周知的设计方法吗?它有名字吗?是否有推荐的Library
名称?
答案 0 :(得分:1)
您的示例正在利用Python的多重继承机制,从而将方法从仅方法,无数据,抽象类A
添加到一个(或几个)面向数据的,具体的具体类{{1 }}
由于它将数据存储(表示)与功能(方法)分开,因此Bruno评论时非常接近mixin ,但区别在于这种模式通常会带来两者数据存储和功能。你的模式的这种差异使它不完全OOP(一个对象应该带来两者),但是让人联想到Aspect-Oriented范例。
如果我在OOP中描述这种机制,我会使用默认方法将类B
称为接口。这将有能力导入某些方法实现的任何地方,但没有字段。我会打电话给课A
Data Access Object
注意:如果您打算为多个界面执行此操作(例如,如果您要将B
和meth1()
从{彼此{1}}和compute_priority_1()
,并将它们放在两个独立的界面中),然后是Interface Segregation Principle。