Найти - Пользователи
Полная версия: Хорош ли пример паттерна Proxy?
Начало » Python для новичков » Хорош ли пример паттерна Proxy?
1
zlodiak
Пытаюсь понять и запомнить паттерн 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
py.user.next
Прошёл только вот эти шаблоны
[guest@localhost oop-patterns]$ ls -1
abstract_factory
adapter
bridge
builder
composite
factory_method
prototype
singleton
[guest@localhost oop-patterns]$
Слишком щепетильная тема, чтобы наскоряк что-то проходить. Не сказать прям, что от шаблонов зависит многое, но работу облегчить они могут значительно. Дают написать код один раз и больше его не трогать, при этом имея возможность дорабатывать программу дальше.

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

ну… пользуясь предложением, так сказать, создал темку
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB