def create_concrete_observer(base_observer_name): print( 'You are creating a concrete class for Observer in Observer pattern.') observer = meta_class.MetaClass() class_name = 'ConcreteObserver' commands = [class_name] wrap(observer._add_class_name, commands) base_names = [base_observer_name] commands = generate_commands_add_base(base_names) wrap(observer._add_base_names, commands) print_class_must_have_base(class_name, base_names, False) curr_func = 'update' curr_params = ['arg'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(observer._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) return observer
def create_concrete_visitor(base_visitor_name, n_visit_func): print('You are creating a concrete visitor class for Visitor pattern.') concrete_visitor = meta_class.MetaClass() concrete_visitor._add_class_name() class_name = concrete_visitor.name base_classes = [base_visitor_name] commands = generate_commands_add_base(base_classes) wrap(concrete_visitor._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) concrete_visitor._add_base_names() for i in range(n_visit_func): curr_func = f'visit_concrete_element_{i}' curr_params = [f'concrete_element_{i}'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(concrete_visitor._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) concrete_visitor._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) concrete_visitor._add_method_decorator(curr_func) concrete_visitor._add_methods() return concrete_visitor
def create_template(n_steps=2): print('You are creating a Template class for Template method pattern.') template = meta_class.MetaClass() class_name = 'TemplateMethod' commands = [class_name] wrap(template._add_class_name, commands) base_classes = ['ABCMeta'] commands = generate_commands_add_base(base_classes) wrap(template._add_base_names, commands) print_class_must_have_base(class_name, base_classes, False) curr_func = 'template_method' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(template._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) for i in range(n_steps): curr_func = f'_primitive_operation_{i}' curr_params = [] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(template._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) return template
def create_base_visitor(): print('You are creating a base visitor class for Visitor pattern.') base_visitor = meta_class.MetaClass() base_visitor._add_class_name() class_name = base_visitor.name base_classes = ['ABC'] commands = generate_commands_add_base(base_classes) wrap(base_visitor._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) base_visitor._add_base_names() n_visit_func = int(input('How many visitor functions do you want: ')) for i in range(n_visit_func): curr_func = f'visit_concrete_element_{i}' curr_params = [f'concrete_element_{i}'] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(base_visitor._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) base_visitor._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) base_visitor._add_method_decorator(curr_func) base_visitor._add_methods() return base_visitor, n_visit_func
def create_concrete_state(base_state_name): print('You are creating a concrete class for State in State pattern.') state = meta_class.MetaClass() state._add_class_name() class_name = state.name base_names = [base_state_name] commands = generate_commands_add_base(base_names) wrap(state._add_base_names, commands) print_class_must_have_base(class_name, base_names, True) state._add_base_names() curr_func = 'handle' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(state._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) state._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) state._add_method_decorator(curr_func) state._add_methods() return state
def create_concrete_strategy(base_state_name, concrete_state_name): print( 'You are creating a concrete class for Strategy in Strategy pattern.') strategy = meta_class.MetaClass() class_name = concrete_state_name commands = [class_name] wrap(strategy._add_class_name, commands) base_names = [base_state_name] commands = generate_commands_add_base(base_names) wrap(strategy._add_base_names, commands) print_class_must_have_base(class_name, base_names, False) curr_func = 'algorithm_interface' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(strategy._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) return strategy
def create_observer(): print('You are creating a base class for Observer in Observer pattern.') observer = meta_class.MetaClass() observer._add_class_name() class_name = observer.name base_names = ['ABC'] commands = generate_commands_add_base(base_names) wrap(observer._add_base_names, commands) print_class_must_have_base(class_name, base_names, True) observer._add_base_names() curr_func = '__init__' curr_params = ['_subject', '_observer_state'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(observer._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) observer._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) observer._add_method_decorator(curr_func) curr_func = 'update' curr_params = ['arg'] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(observer._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) observer._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) observer._add_method_decorator(curr_func) return observer
def create_context(): print('You are creating a context class for State pattern.') context = meta_class.MetaClass() class_name = 'Context' commands = [class_name] wrap(context._add_class_name, commands) base_classes = [] commands = generate_commands_add_base(base_classes) wrap(context._add_base_names, commands) print_class_must_have_base(class_name, base_classes, False) curr_func = '__init__' curr_params = ['state'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(context._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) curr_func = 'request' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(context._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) return context
def create_concrete_class(base_name, n_steps): print('You are creating a concrete class for Template method pattern.') concrete = meta_class.MetaClass() concrete._add_class_name() class_name = concrete.name base_names = [base_name] commands = generate_commands_add_base(base_names) wrap(concrete._add_base_names, commands) print_class_must_have_base(class_name, base_names, True) concrete._add_base_names() for i in range(n_steps): curr_func = f'_primitive_operation_{i}' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(concrete._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) concrete._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) concrete._add_method_decorator(curr_func) concrete._add_methods() return concrete
def create_base_element(): print('You are creating a base element class for Visitor pattern.') base_element = meta_class.MetaClass() base_element._add_class_name() class_name = base_element.name base_classes = ['ABC'] commands = generate_commands_add_base(base_classes) wrap(base_element._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) base_element._add_base_names() curr_func = 'accept' curr_params = ['visitor'] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(base_element._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) base_element._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) base_element._add_method_decorator(curr_func) base_element._add_methods() return base_element
def create_base_strategy(): print('You are creating a base class for Strategy in Strategy pattern.') strategy = meta_class.MetaClass() strategy._add_class_name() class_name = strategy.name base_names = ['ABC'] commands = generate_commands_add_base(base_names) wrap(strategy._add_base_names, commands) print_class_must_have_base(class_name, base_names, True) strategy._add_base_names() curr_func = 'algorithm_interface' curr_params = [] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(strategy._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) strategy._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) strategy._add_method_decorator(curr_func) strategy._add_methods() return strategy
def create_servant(): print('You are creating a servant class for Servant pattern.') servant = meta_class.MetaClass() servant._add_class_name() class_name = servant.name base_classes = [] commands = generate_commands_add_base(base_classes) wrap(servant._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) servant._add_base_names() servant._add_methods() return servant
def create_template(): print('You are creating a Template class for Template method pattern.') template = meta_class.MetaClass() template._add_class_name() class_name = template.name base_classes = ['ABC'] commands = generate_commands_add_base(base_classes) wrap(template._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) template._add_base_names() curr_func = 'template_method' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(template._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) template._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) template._add_method_decorator(curr_func) n_steps = int(input('How many algorithm steps do you want: ')) for i in range(n_steps): curr_func = f'_primitive_operation_{i}' curr_params = [] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(template._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) template._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) template._add_method_decorator(curr_func) template._add_methods() return template, n_steps
def create_servant(strategy_name): print( 'You are creating a servant class for the composition of Servant and Strategy.' ) servant = meta_class.MetaClass() servant._add_class_name() class_name = servant.name base_classes = [] commands = generate_commands_add_base(base_classes) wrap(servant._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) servant._add_base_names() curr_func = f'set_{strategy_name}' curr_params = [f'{strategy_name}_instance', 'new_strategy'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(servant._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) servant._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) servant._add_method_decorator(curr_func) curr_func = f'set_context_interface' curr_params = [f'{strategy_name}_instance', 'new_context_interface'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(servant._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) servant._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) servant._add_method_decorator(curr_func) servant._add_methods() return servant
def create_context(): print('You are creating a context class for State in composition of State and Template Method.') context = meta_class.MetaClass() context._add_class_name() class_name = context.name base_classes = [] commands = generate_commands_add_base(base_classes) wrap(context._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) context._add_base_names() curr_func = '__init__' curr_params = ['state'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(context._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) context._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) context._add_method_decorator(curr_func) curr_func = 'request' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(context._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) context._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) context._add_method_decorator(curr_func) context._add_methods() return context
def create_context(): print('You are creating a context class for Strategy pattern.') context = meta_class.MetaClass() context._add_class_name() class_name = context.name base_classes = [] commands = generate_commands_add_base(base_classes) wrap(context._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) context._add_base_names() curr_func = '__init__' curr_params = ['strategy'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(context._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) context._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) context._add_method_decorator(curr_func) curr_func = 'context_interface' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(context._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) context._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) context._add_method_decorator(curr_func) context._add_methods() return context
def create_base_state(): print('You are creating a base class for State in composition of State and Template Method.') state = meta_class.MetaClass() state._add_class_name() class_name = state.name base_names = ['ABC'] commands = generate_commands_add_base(base_names) wrap(state._add_base_names, commands) print_class_must_have_base(class_name, base_names, True) state._add_base_names() curr_func = '__init__' curr_params = ['template_method_instance'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(state._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) state._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) state._add_method_decorator(curr_func) curr_func = 'handle' curr_params = [] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(state._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) state._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) state._add_method_decorator(curr_func) state._add_methods() return state
def create_base_state(): print('You are creating a base class for State in State pattern.') state = meta_class.MetaClass() class_name = 'BaseState' commands = [class_name] wrap(state._add_class_name, commands) base_names = ['ABCMeta'] commands = generate_commands_add_base(base_names) wrap(state._add_base_names, commands) print_class_must_have_base(class_name, base_names, False) curr_func = 'handle' curr_params = [] curr_decors = ['abstractmethod'] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(state._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, False) print_class_must_have_decors(class_name, curr_func, curr_decors, False) return state
def create_subject(): print('You are creating a Subject class for Observer pattern.') subject = meta_class.MetaClass() subject._add_class_name() class_name = subject.name base_classes = [] commands = generate_commands_add_base(base_classes) wrap(subject._add_base_names, commands) print_class_must_have_base(class_name, base_classes, True) subject._add_base_names() curr_func = '__init__' curr_params = ['observers', 'state'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(subject._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) subject._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) subject._add_method_decorator(curr_func) curr_func = 'attach' curr_params = ['observer'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(subject._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) subject._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) subject._add_method_decorator(curr_func) curr_func = 'detach' curr_params = ['observer'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(subject._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) subject._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) subject._add_method_decorator(curr_func) curr_func = '_notify' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(subject._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) subject._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) subject._add_method_decorator(curr_func) curr_func = 'set_state' curr_params = ['new_state'] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(subject._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) subject._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) subject._add_method_decorator(curr_func) curr_func = 'get_state' curr_params = [] curr_decors = [] commands = generate_commands_add_func(curr_func, curr_params, curr_decors) wrap(subject._add_method, commands) print_class_must_have_func(class_name, curr_func, curr_params, True) subject._add_args_to_method(curr_func) print_class_must_have_decors(class_name, curr_func, curr_decors, True) subject._add_method_decorator(curr_func) return subject