python设计模式—-适配器模式 以及对旧知识的复习

class Synthesizer():
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return "音响 品牌是: {} ".format(self.name)

    def play(self):
        return "用来播放电子歌曲"


class Human():
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return "{} ".format(self.name)

    def speak(self):
        return "你好"


class Computer():
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return "这个电脑牌子是: {}".format(self.name)

    def execute(self):
        return "执行一个程序"


class Adapter():
    def __init__(self, obj, adapted_methods):
        self.obj = obj
        self.__dict__.update(adapted_methods)

    def __str__(self):
        return str(self.obj)


def main():
    objects = [Computer("Lenovo")]
    synth = Synthesizer("moog")
    # 创建一个音响
    objects.append(Adapter(synth, dict(execute=synth.play)))
      # dict(execute=synth.play)) 在字典中添加一个键为execute,值为synth的键值对
    human = Human("Bob")
    # 创建一个人
    objects.append(Adapter(human, dict(execute=human.speak)))
    print(objects)
    for i in objects:
        # 列表的取值顺序是先进先出
        print(type(i.execute))
        # <class 'method'>  method是将类实例作为其第一个参数的函数。method是类的成员
        print(" {} ---- {}  ".format(str(i), i.execute())) 
         # i就是 __str__ return 返回的数据 i.execute() 对象调用这个方法


if __name__ == '__main__':
    main()

"""
Bod
电脑
音响
这三个条件是独立的
现在要使用一个适配器去让Bod去使用电脑运行这个音响播发音乐


适配器模式主要用于 帮助我们实现两个不兼容接口之间的兼容。

  当我们希望把一个老组件用于一个新组系统或者把一个新组件应用于老系统中,同时在代码无法修改的,
或者说无法访问这些代码时(在实际开发中,旧系统的代码修改后牵一而动全身,很容易引起系统的崩溃。)。
这时候,我们可以编写一个额外的代码层,该代码层包含让这两个接口之间能够通信需要进行的所有修改。

  注:通俗的说就是设计 接口/API,以保证程序符合 开放/封闭 原则,同时保证不修改其他地方接口的调用方式,
  保持新老代码间的兼容性。
"""

匿名

发表评论

匿名网友