Python 设计模式之适配器模式

2019-11-25 / Java Python Design Pattern

意图: 将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适用性: 1. 你想使用一个类已经存在的类,而它的接口不符合你的需求。 2. 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

现实中有很多适配器设计模式的例子,比如国内的电脑拿到欧洲那边是不能直接使用的,因为电脑的电源插口是不一样的,欧洲那边电源提供的电压是110V,这个时候就需要一个转接器就将110V电压转换成220V电压,这个时候就可以使用国内购买的电脑了。这个转接器用的就是适配器模式

# coding:utf-8


def printInfo(info):
    print(info)


# 球员类
class Player():
    name = ''

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

    def Attack(self):
        pass

    def Defense(self):
        pass


# 前锋
class Forwards(Player):
    def __init__(self, name):
        Player.__init__(self, name)

    def Attack(self):
        printInfo("前锋%s 进攻" % self.name)

    def Defense(self):
        printInfo("前锋%s 防守" % self.name)


# 中锋
class Center(Player):
    def __init__(self, name):
        Player.__init__(self, name)

    def Attack(self):
        printInfo("中锋%s 进攻" % self.name)

    def Defense(self):
        printInfo("中锋%s 防守" % self.name)


# 后卫
class Guards(Player):
    def __init__(self, name):
        Player.__init__(self, name)

    def Attack(self):
        printInfo("后卫%s 进攻" % self.name)

    def Defense(self):
        printInfo("后卫%s 防守" % self.name)


# 外籍中锋(待适配类)
# 中锋
class ForeignCenter(Player):
    name = ''

    def __init__(self, name):
        Player.__init__(self, name)

    def ForeignAcctack(self):
        printInfo("外籍中锋%s 进攻" % self.name)

    def ForeignDefense(self):
        printInfo("外籍中锋%s 防守" % self.name)


# 翻译(适配类)
class Translator(Player):
    foreign_center = None

    def __init__(self, name):
        self.foreign_center = ForeignCenter(name)

    def Attack(self):
        self.foreign_center.ForeignAcctack()

    def Defense(self):
        self.foreign_center.ForeignDefense()


def clientUI():
    b = Forwards("巴蒂尔")
    ym = Guards("姚明")
    m = Translator("麦克格雷迪")

    b.Attack()
    m.Defense()
    ym.Attack()
    ym.Defense()


clientUI()