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,以保证程序符合 开放/封闭 原则,同时保证不修改其他地方接口的调用方式,
  保持新老代码间的兼容性。
"""

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值