#!/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())
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCmZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAppbXBvcnQgZGF0ZXRpbWUKIApjbGFzcyBEQmludChtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBnZXREYXRhKHNlbGYpOgogICAgICAgIHBhc3MKIApjbGFzcyBEQihEQmludCk6CiAgICBkZWYgZ2V0RGF0YShzZWxmKToKICAgICAgICByZXR1cm4gJ3ByaXZhdGUgZGF0YScKIApjbGFzcyBQcm94eShEQmludCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZGIpOgogICAgICAgIHNlbGYuZGIgPSBkYgoKICAgIGRlZiBnZXREYXRhKHNlbGYpOgogICAgICAgIHNlbGYud3JpdGVMb2coKQogICAgICAgIHJldHVybiBzZWxmLmRiLmdldERhdGEoKQoKICAgIGRlZiB3cml0ZUxvZyhzZWxmKToKICAgICAgICBwcmludCgncmVxdWVzdCBkYXRhIGluOicsIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpKSAgICAgICAgCiAKY2xhc3MgVXNlcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhT2JqKToKICAgICAgICBzZWxmLmRhdGFPYmogPSBkYXRhT2JqCgogICAgZGVmIHJlcXVlc3REYXRhKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmRhdGFPYmouZ2V0RGF0YSgpCgoKZGIgPSBEQigpCnVzZXIxID0gVXNlcihkYikKcHJpbnQodXNlcjEucmVxdWVzdERhdGEoKSkKCnByb3h5ID0gUHJveHkoZGIpCnVzZXIyID0gVXNlcihwcm94eSkKcHJpbnQodXNlcjIucmVxdWVzdERhdGEoKSkK