Python 适配器模式

0 投票
1 回答
1021 浏览
提问于 2025-04-17 22:48

假设我有一个这样的类:

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 的书名?我需要在 SinglePersonInBook 适配器里加一个方法吗?如果需要,那做适配器的意义是什么呢?

我可以这样写我的 init 方法来创建 SPIB 吗:

def __init__(self, name, age, book_title):
    self._person = MultiplePeopleInBook([name],[age],boo_title)

这样的话,我可以像这样创建一个 SPIB 对象:

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

我觉得这样看起来更简洁。

1 个回答

1

我该如何获取spib的书名?我需要在SinglePersonInBook适配器中为此创建一个方法吗?如果需要,那做适配器有什么意义呢?

是的,你需要。根据你的例子,做一个适配器其实没什么意义。更好的办法是为书中的人创建一个抽象类,里面有两个实现(单人和多人)。基本问题是——你为什么需要这个?

我可以这样写我的SPIB初始化方法吗:

def __init__(self, name, age, book_title):
    self._person = MultiplePeopleInBook([name],[age],boo_title)

这样的话,我可以像这样创建一个SPIB对象:

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

我觉得这样看起来更简洁。

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

撰写回答