adapter_obj.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # Структурный шаблон проектирования ("Адаптер на уровена объектов")
  2. # Позволяет объектам с не совместимыми интерфейсами работать вместе
  3. import abc
  4. class IScales(metaclass=abc.ABCMeta):
  5. @abc.abstractmethod
  6. def get_weight(self) -> float:
  7. pass
  8. class RussianScales(IScales):
  9. def __init__(self, cw: float):
  10. self.__currnt_weight = cw
  11. def get_weight(self) -> float:
  12. return self.__currnt_weight
  13. class BritishScales:
  14. def __init__(self, cw: float):
  15. self.__currnt_weight = cw
  16. def get_weight(self) -> float:
  17. return self.__currnt_weight
  18. class AdapterForBritishScales(IScales):
  19. def __init__(self, british_scales: BritishScales):
  20. self.__british_scales = british_scales
  21. def get_weight(self) -> float:
  22. return self.__british_scales.get_weight() * 0.453
  23. if __name__ == "__main__":
  24. kg: float = 55
  25. lb: float = 55
  26. rScales = RussianScales(kg)
  27. bScales = AdapterForBritishScales(
  28. BritishScales(lb))
  29. print(rScales.get_weight())
  30. print(bScales.get_weight())
  31. # 55
  32. # 24.915