Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2019 19:54:54

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

Хорош ли пример паттерна Adapter?

Помогите пожалуйста понять хорошо ли я следующим кодом иллюстрировал паттерн Adapter.

Я попытался через Adapter объединить два интерфейса, которые отличаются:
1. названием
2. форматом возвращаемого значения

Мне кажется, это как раз те два пункта, в работе с которыми может помочь описываемый паттерн. не забыл ли я что-нибудь важное? Можно ли пример улучшить и приспособить для более сложной задачи, которая решается в рамках этого adapter?

 #!/usr/bin/env python3
 
import random
 
class RandomNum:
  def getNum(self):
    return random.random()
 
class RandomObj:
  def getObj(self):
    return {'num': random.random()}
 
class Adapter:
  def __init__(self, adaptee):
    self.adaptee = adaptee
 
  def getNum(self):
    return self.adaptee.getObj()['num']
 
n = RandomNum()
o = Adapter(RandomObj())
 
print(n.getNum())
print(o.getNum())

LIVE DEMO

Офлайн

#2 Март 15, 2019 05:09:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Хорош ли пример паттерна Adapter?

zlodiak
для более сложной задачи
усложнить можно было бы, например, так:
Во-первых, пусть методы не только возвращают разные типы значений, но и аргументы у них пусть будут разные.
Во-вторых, ин риал лайф редко окогда можно обойтись без райза исключений. Пусть ваши объекты выкидывают экцепшены (разные!!!), а еще будет круче, если один райзит, а другой возвращает значение-ошибку.
В-третьих, инициализацию тоже можно сделать по-сложнее. Пускай один из классов создает объекты статическим методом.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version