"""
桥接模式
把对象的抽象部分和实现部分分离开来,使他们能独立变化
如果一个对象可以进行多角度分类,那么就把多角度分离出来,让他们独立变化,减少耦合
"""
from abc import ABCMeta, abstractmethod
class Skin(object):
__metaclass__ = ABCMeta
def __init__(self):
pass
@abstractmethod
def has_skin(self):
pass
class YellowSkin(Skin):
def __init__(self):
super(YellowSkin, self).__init__()
def has_skin(self):
print("有黄皮肤")
class WhiteSkin(Skin):
def __init__(self):
super(WhiteSkin, self).__init__()
def has_skin(self):
print("有白皮肤")
class Old(object):
__metaclass__ = ABCMeta
def __init__(self):
pass
@abstractmethod
def is_old(self):
pass
class Kid(Old):
def __init__(self):
super(Kid, self).__init__()
def is_old(self):
print("是小孩")
class Older(Old):
def __init__(self):
super(Older, self).__init__()
def is_old(self):
print("是老人")
class AreaPeoPle(object):
__metaclass__ = ABCMeta
def __init__(self, skin=None, old=None):
self.skin = skin
self.old = old
def set_skin(self, skin):
self.skin = skin
def set_old(self, old):
self.old = old
@abstractmethod
def show(self):
pass
class Chinese(AreaPeoPle):
def __init__(self, skin=None, old=None):
super(Chinese, self).__init__(skin, old)
def show(self):
print("我是一个中国人")
self.skin.has_skin()
self.old.is_old()
print("")
class American(AreaPeoPle):
def __init__(self, skin=None, old=None):
super(American, self).__init__(skin, old)
def show(self):
print("我是一个美国人")
self.skin.has_skin()
self.old.is_old()
print("")
if __name__ == '__main__':
yellow = YellowSkin()
white = WhiteSkin()
kid = Kid()
older = Older()
chinese = Chinese(yellow, kid)
chinese.show()
american = American(white, older)
american.show()
桥接模式(python)
最新推荐文章于 2024-02-22 16:44:29 发布