@habrdima

Соответствует ли код uml диаграмме?

в википедии есть описание паттерна proxy
https://ru.wikipedia.org/wiki/Заместитель_(шаблон_...

скажите uml диаграмма соответствует коду в пайтон примере?

стрелка ассоциация от заместитель к реальный субъект должна быть композиция, да?

и что в коде клиент?
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
Стрелка от "заместителя" и "реального субъекта" к "субъекту" называется "наследование".
Показывает, что "Реальный субъект" и "заместитель" реализуют один и тот же интерфейс/наследованы от базового класса.

Стрелка от "заместителя" к "реальному субъекту" называется "зависимость".
Показывает, что "заместитель" зависит от "реального субъекта" (в данном случае содержит его)

В коде "клиент" - это тот, кто будет вызывать методы "субъекта" (тот кто будет от него зависеть)

В примере на python - это собственно сама программа, тк Python не обязывает тебя для всего создавать классы.

Дублирую сюда код и картинку, чтобы не потерялись

Proxy_patt.gif

# -*- coding: utf-8 -*-

class IMath:
    """Интерфейс для прокси и реального субъекта"""
    def add(self, x, y):
        raise NotImplementedError()

    def sub(self, x, y):
        raise NotImplementedError()

    def mul(self, x, y):
        raise NotImplementedError()

    def div(self, x, y):
        raise NotImplementedError()

class Math(IMath):
    """Реальный субъект"""
    def add(self, x, y):
        return x + y

    def sub(self, x, y):
        return x - y

    def mul(self, x, y):
        return x * y

    def div(self, x, y):
        return x / y

class Proxy(IMath):
    """Прокси"""
    def __init__(self):
        self.math = Math()

    def add(self, x, y):
        return x + y

    def sub(self, x, y):
        return x - y

    def mul(self, x, y):
        return self.math.mul(x, y)

    def div(self, x, y):
        return float('inf') if y == 0 else self.math.div(x, y) 

p = Proxy()
x, y = 4, 2
print '4 + 2 = ' + str(p.add(x, y))
print '4 - 2 = ' + str(p.sub(x, y))
print '4 * 2 = ' + str(p.mul(x, y))
print '4 / 2 = ' + str(p.div(x, y))


Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы