Proxy Pattern in Python
class Something:
def thing1(self): return 'thing1 in Something'
def thing2(self): return 'thing2 in Something'
class SomethingElse:
def thing3(self): return 'thing3 in SomethingElse'
def thing4(self): return 'thing4 in SomethingElse'
class Proxy:
def __init__(self, my_obj):
self.__proxy = my_obj
def __getattr__(self, attr):
def some_method(*args, **kwargs):
result = getattr(self.__proxy, attr)(*args, **kwargs)
return result
return some_method
class Everything:
def __getattr__(self, thing):
self.proxy = Proxy(Something()) if thing in dir(Something) else Proxy(SomethingElse())
return getattr(self.proxy, thing)
everything = Everything()
print(everything.thing1())
print(everything.thing2())
print(everything.thing3())
print(everything.thing4())
# thing1 in Something
# thing2 in Something
# thing3 in SomethingElse
# thing4 in SomethingElse
Javascript
class Something {
thing1() { return 'thing1 in Something' }
thing2() { return 'thing2 in Something' }
}
class SomethingElse {
thing3() { return 'thing3 in SomethingElse' }
thing4() { return 'thing4 in SomethingElse' }
}
const something = new Something()
const somethingelse = new SomethingElse()
const everything = new Proxy(somethingelse, {
get: function(target, property) {
return target[property] || something[property]
}
});
console.log(everything.thing1())
console.log(everything.thing2())
console.log(everything.thing3())
console.log(everything.thing4())
// thing1 in Something
// thing2 in Something
// thing3 in SomethingElse
// thing4 in SomethingElse