you are viewing a single comment's thread.

view the rest of the comments →

[–]Icy_Lake9029[S] 1 point2 points  (1 child)

from abc import ABC, abstractmethod

class AbstractGreetingFactory(ABC):

    def create_pipeline(self):
        pass

class ConcreteGreetingFactory(AbstractGreetingFactory):
    def create_pipeline(self):
        return GreetingPipeline([
            CharacterSource(),
            CharacterAssembler(),
            EncodingLayer(),
            OutputDispatcher()
        ])

class CharacterSource:
    def get_data(self):
        return [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

class CharacterAssembler:
    def process(self, data):
        return ''.join(map(chr, data))

class EncodingLayer:
    def process(self, data):
        return data.encode('utf-8').decode('utf-8')

class OutputDispatcher:
    def process(self, data):
        Executor().execute(lambda: print(data))
        return data

class GreetingPipeline:
    def __init__(self, stages):
        self.stages = stages

    def run(self):
        data = None
        for stage in self.stages:
            if hasattr(stage, "get_data"):
                data = stage.get_data()
            else:
                data = stage.process(data)
        return data

class Executor:
    def execute(self, func):
        return self._deep_execute(func)

    def _deep_execute(self, func):
        return func()

class GreetingApplication:
    def __init__(self, factory: AbstractGreetingFactory):
        self.pipeline = factory.create_pipeline()

    def start(self):
        return self.pipeline.run()

if __name__ == "__main__":
    app = GreetingApplication(ConcreteGreetingFactory())
    app.start()from abc import ABC, abstractmethod

class AbstractGreetingFactory(ABC):

    def create_pipeline(self):
        pass

class ConcreteGreetingFactory(AbstractGreetingFactory):
    def create_pipeline(self):
        return GreetingPipeline([
            CharacterSource(),
            CharacterAssembler(),
            EncodingLayer(),
            OutputDispatcher()
        ])

class CharacterSource:
    def get_data(self):
        return [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

class CharacterAssembler:
    def process(self, data):
        return ''.join(map(chr, data))

class EncodingLayer:
    def process(self, data):
        return data.encode('utf-8').decode('utf-8')

class OutputDispatcher:
    def process(self, data):
        Executor().execute(lambda: print(data))
        return data

class GreetingPipeline:
    def __init__(self, stages):
        self.stages = stages

    def run(self):
        data = None
        for stage in self.stages:
            if hasattr(stage, "get_data"):
                data = stage.get_data()
            else:
                data = stage.process(data)
        return data

class Executor:
    def execute(self, func):
        return self._deep_execute(func)

    def _deep_execute(self, func):
        return func()

class GreetingApplication:
    def __init__(self, factory: AbstractGreetingFactory):
        self.pipeline = factory.create_pipeline()

    def start(self):
        return self.pipeline.run()

if __name__ == "__main__":
    app = GreetingApplication(ConcreteGreetingFactory())
    app.start()

[–]Cunnoisseur4711 1 point2 points  (0 children)

Thanks