Уведомления

Группа в Telegram: @pythonsu

#1 Март 13, 2019 20:05:49

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

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

Пытаюсь понять и запомнить паттерн Proxy. Лучше всего для этого иметь дело с наглядным примером, который имеет практическую ценность. Оцените пожалуйста насколько удачно я написал код, иллюстрирующий этот паттерн(далее излагаю всё так как буду отвечать на экзамене).

Допустим есть база данных с некоторыми данными. К ней можно обращаться напрямую и запрашивать данные. Допустим заказчик захотел логировать каждое обращение к БД. для этого я создал proxy-объект, который делегирует запрос данных, логируя каждый запрос.

Конечно, и БД, и прокси имеют одинаковый интерфейс, это выражено в том, что они наследуются от абстрактного класса.

В результате создаются два пользователя, первый из которых админ, а второй простой пользователь. Как видите простой пользователь запрашивает данные через прокси, а админ напрямую.

 #!/usr/bin/env python3
 
from abc import ABCMeta, abstractmethod
import datetime
 
class DBint(metaclass=ABCMeta):
    @abstractmethod
    def getData(self):
        pass
 
class DB(DBint):
    def getData(self):
        return 'private data'
 
class Proxy(DBint):
    def __init__(self, db):
        self.db = db
    def getData(self):
        self.writeLog()
        return self.db.getData()
    def writeLog(self):
        print('request data in:', datetime.datetime.now())        
 
class User:
    def __init__(self, dataObj):
        self.dataObj = dataObj
    def requestData(self):
        return self.dataObj.getData()
db = DB()
user1 = User(db)
print(user1.requestData())
proxy = Proxy(db)
user2 = User(proxy)
print(user2.requestData())

LIVE DEMO

Офлайн

#2 Март 14, 2019 00:49:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

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

Прошёл только вот эти шаблоны

[guest@localhost oop-patterns]$ ls -1
abstract_factory
adapter
bridge
builder
composite
factory_method
prototype
singleton
[guest@localhost oop-patterns]$
Слишком щепетильная тема, чтобы наскоряк что-то проходить. Не сказать прям, что от шаблонов зависит многое, но работу облегчить они могут значительно. Дают написать код один раз и больше его не трогать, при этом имея возможность дорабатывать программу дальше.

Так что, если изучаешь шаблоны, по этим можешь спрашивать, у меня примеры выверенные по максимуму и на нескольких языках, чтобы понятнее были видны все аспекты.



Офлайн

#3 Март 14, 2019 19:56:06

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

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

py.user.next
Так что, если изучаешь шаблоны, по этим можешь спрашивать, у меня примеры выверенные по максимуму и на нескольких языках, чтобы понятнее были видны все аспекты.

ну… пользуясь предложением, так сказать, создал темку

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version