Python适配器模式

时间:2014-03-18 12:34:38

标签: python design-patterns adapter

说我有以下课程

class MultiplePeopleInBook(object):
    def __init__(self, names, ages, book_title):
        self._names = names
        self._ages = ages
        self._book_title = book_title

    @property
    def names(self):
        return self._names

    @property
    def ages(self):
        return ages

    @property
    def book_title(self):
        return book_title

现在我需要另一个课程,比如这个课程代表一本只有一个人的课程。

class SinglePersonInBook(object):
    def __init__(self, multiple_person_object):
        self._person = multiple_person_object

    @property
    def name(self):
        return self._person.names[0]

    @property
    def age(self):
        return self._person.ages[0]

所以,我会像这样创建一个MultiplePeopleInBook对象:

mpib = MultiplePeopleInBook(['Bob', 'Foo'], [12,24],'foo book')

和SinglePersonInBook如下:

spib = SinglePersonInBook(MultiplePeopleInBook(['Bar'], [122], 'bar book')

问题: 我能正确设置吗?

如何获取spib的book_title?我需要在SinglePersonInBook适配器中有一个方法吗?如果是这样,那么将其作为适配器有什么意义呢?

我可以像这样编写SPIB的 init 方法:

def __init__(self, name, age, book_title):
    self._person = MultiplePeopleInBook([name],[age],boo_title)
这样,我可以像这样创建一个SPIB对象:

spib = SinglePersonInBook('Bar', 122, 'bar book')

这对我来说看起来更干净

1 个答案:

答案 0 :(得分:1)

  

如何获取spib的book_title?我需要在SinglePersonInBook适配器中有一个方法吗?如果是这样,那么将其作为适配器有什么意义呢?

是的,你这样做。在您的示例中,制作适配器毫无意义。更好的解决方案是通过两种实现(单一和多种)为书中的人制作抽象。基本问题是 - 你需要什么?

  

我可以像这样编写SPIB的init方法:

def __init__(self, name, age, book_title):
    self._person = MultiplePeopleInBook([name],[age],boo_title)
     这样,我可以像这样创建一个SPIB对象:

spib = SinglePersonInBook('Bar', 122, 'bar book')
     

这对我来说看起来更干净

你可以,但在这种情况下简单的抽象更好。