diff --git a/examples/providers/abstract_factory/cache.py b/examples/providers/abstract_factory/cache.py new file mode 100644 index 00000000..fe499a2c --- /dev/null +++ b/examples/providers/abstract_factory/cache.py @@ -0,0 +1,25 @@ +"""Example hierarchy of cache clients with abstract base class.""" + + +class AbstractCacheClient(object): + """Abstract cache client.""" + + +class RedisCacheClient(AbstractCacheClient): + """Cache client implementation based on Redis.""" + + def __init__(self, host, port, db): + """Initializer.""" + self.host = host + self.port = port + self.db = db + + +class MemcacheCacheClient(AbstractCacheClient): + """Cache client implementation based on Memcached.""" + + def __init__(self, hosts, port, prefix): + """Initializer.""" + self.hosts = hosts + self.port = port + self.prefix = prefix diff --git a/examples/providers/abstract_factory/example.py b/examples/providers/abstract_factory/example.py new file mode 100644 index 00000000..2bad9a77 --- /dev/null +++ b/examples/providers/abstract_factory/example.py @@ -0,0 +1,28 @@ +"""`AbstractFactory` providers example.""" + +import cache + +import dependency_injector.providers as providers + + +# Define abstract cache client factory: +cache_client_factory = providers.AbstractFactory(cache.AbstractCacheClient) + +if __name__ == '__main__': + # Override abstract factory with redis client factory: + cache_client_factory.override(providers.Factory(cache.RedisCacheClient, + host='localhost', + port=6379, + db=0)) + redis_cache = cache_client_factory() + print(redis_cache) # + + # Override abstract factory with memcache client factory: + cache_client_factory.override(providers.Factory(cache.MemcacheCacheClient, + hosts=['10.0.1.1', + '10.0.1.2', + '10.0.1.3'], + port=11211, + prefix='my_app')) + memcache_cache = cache_client_factory() + print(memcache_cache) #