renamed package to pypattyrn
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
from abc import ABCMeta, abstractmethod
|
||||
|
||||
|
||||
class Director(object, metaclass=ABCMeta):
|
||||
"""
|
||||
Abstract director class, responsible for using a builder to fully construct an object.
|
||||
|
||||
- External Usage documentation: U{https://github.com/tylerlaberge/PyPatterns/wiki/Creational-Pattern-Usage}
|
||||
- External Builder Pattern documentation: U{https://en.wikipedia.org/wiki/Builder_pattern}
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Initialize a new Director.
|
||||
"""
|
||||
self.builder = None
|
||||
|
||||
@abstractmethod
|
||||
def construct(self):
|
||||
"""
|
||||
Abstract method for fully constructing an object.
|
||||
|
||||
Concrete implementations should override this and use a builder to construct the object.
|
||||
|
||||
@raise NotImplementedError: If this method is not overridden.
|
||||
"""
|
||||
pass
|
||||
|
||||
def get_constructed_object(self):
|
||||
"""
|
||||
Get the object this director is responsible for constructing.
|
||||
|
||||
@return: The object that this director is responsible for constructing.
|
||||
"""
|
||||
return self.builder.constructed_object
|
||||
|
||||
|
||||
class Builder(object, metaclass=ABCMeta):
|
||||
"""
|
||||
Abstract builder class, responsible for constructing various pieces of an object.
|
||||
|
||||
- External Usage documentation: U{https://github.com/tylerlaberge/PyPatterns/wiki/Creational-Pattern-Usage}
|
||||
- External Builder Pattern documentation: U{https://en.wikipedia.org/wiki/Builder_pattern}
|
||||
"""
|
||||
|
||||
def __init__(self, constructed_object):
|
||||
"""
|
||||
Initialize a new Builder.
|
||||
|
||||
Concrete Builders should call this method from within their own __init__ method.
|
||||
The concrete __init__ method should also register all build options to build methods,
|
||||
by using the _register method.
|
||||
|
||||
@param constructed_object: An instance of an object this builder is responsible for.
|
||||
"""
|
||||
self.constructed_object = constructed_object
|
||||
self.build_methods = dict()
|
||||
|
||||
def build(self, build_option, **kwargs):
|
||||
"""
|
||||
Build a piece of the constructed object.
|
||||
|
||||
@param build_option: The part of the object to build. All build options should have been registered in __init__.
|
||||
@type build_option: str
|
||||
@param kwargs: Additional arguments for building.
|
||||
"""
|
||||
self.build_methods[build_option](**kwargs)
|
||||
|
||||
def _register(self, build_option, build_method):
|
||||
"""
|
||||
Register a build option to a build method.
|
||||
|
||||
All concrete builders should call this method in their constructor at least once.
|
||||
|
||||
@param build_option: A string representing the part of the object to build.
|
||||
@type build_option: str
|
||||
@param build_method: The method to call when given build option is selected.
|
||||
"""
|
||||
self.build_methods[build_option] = build_method
|
||||
Reference in New Issue
Block a user