"""
Shell
-----

众生万象,皆有规律可循,神一般的我发现了其中的规律,开始指手画脚。
我就像个产品狗,我不动手实践,我就瞎BB。

Builder使用组合方式还是类继承由设计者决定。

"""


class Shell:
    """
    出生的时候,我懵懂无知,什么都不懂,父辈们细心地教会我一切;
    待我及笄,你看到的将是新的我。
    """
    def open(self, address):
        return True

    def close(self):
        return True

    def login(self, user):
        return True

    def logout(self):
        return True

    def send(self, cmd, exp_list, timeout):
        return True

    def read(self, exp_list, timeout):
        return True

    # 我只是为了解决pycharm中的代码提示
    def __getattr__(self, item):
        pass


class ShellTypeBuilder:
    """
    我自己也啥都不干,我的子孙沿着我走过的轨迹探索未知;
    """
    def build(self):
        # 为了语法提示,我们这里还是决定返回一个默认shell,只是它什么也干不了
        return Shell()


class ShellCreator:
    """
    我创造一切,统治万物,我就是权威;
    我的话很少,但是做的事情可不简单;
    我手中的权杖让你不得不服从我的规则,不服从我就无法从我这获得什么.
    """
    __shells = []

    # 我说,要有鲍鱼,厨师就端上来了
    @staticmethod
    def create(name):
        for sh in ShellCreator.__shells:
            if sh[0] == name:
                return sh[1]().build()
        return ShellTypeBuilder().build()

    # 我喜欢不断地请厨师为我烹饪美食
    @staticmethod
    def add(name, builder_class):
        if not isinstance(builder_class(), ShellTypeBuilder):
            return False
        for sh in ShellCreator.__shells:
            if sh[0] == name:
                return True
        ShellCreator.__shells.append((name, builder_class))
        return True

@@ -188,380 +188,8 @@
 %22%22%22%0A
-    def open(self, address):%0A        return True%0A%0A    def close(self):%0A        return True%0A%0A    def login(self, user):%0A        return True%0A%0A    def logout(self):%0A        return True%0A%0A    def send(self, cmd, exp_list, timeout):%0A        return True%0A%0A    def read(self, exp_list, timeout):%0A        return True%0A%0A    # %E6%88%91%E5%8F%AA%E6%98%AF%E4%B8%BA%E4%BA%86%E8%A7%A3%E5%86%B3pycharm%E4%B8%AD%E7%9A%84%E4%BB%A3%E7%A0%81%E6%8F%90%E7%A4%BA%0A    def __getattr__(self, item):%0A    
     
@@ -193,16 +193,16 @@
    pass%0A
+
 %0A%0Aclass 
@@ -291,55 +291,8 @@
 f):%0A
-        # %E4%B8%BA%E4%BA%86%E8%AF%AD%E6%B3%95%E6%8F%90%E7%A4%BA,%E6%88%91%E4%BB%AC%E8%BF%99%E9%87%8C%E8%BF%98%E6%98%AF%E5%86%B3%E5%AE%9A%E8%BF%94%E5%9B%9E%E4%B8%80%E4%B8%AA%E9%BB%98%E8%AE%A4shell,%E5%8F%AA%E6%98%AF%E5%AE%83%E4%BB%80%E4%B9%88%E4%B9%9F%E5%B9%B2%E4%B8%8D%E4%BA%86%0A
     
@@ -306,15 +306,12 @@
 urn 
-Shell()
+None
 %0A%0A%0Ac

modify by the issue