设计模式:中介模式


# 中介者模式应用场景
# 当有多个对象彼此间相互交互的时候,自然就会想到对象间的耦合度过高,解决办法就是封装对象间的交互行为,因此就能想到中介者模式就是干这行的。

# 中介者模式优点
# 通过让对象彼此解耦,增加对象的复用性
# 通过将控制逻辑集中,可以简化系统维护
# 通过中介者使一对所变成了一堆一,便于理解

# 中介者模式缺点
# 如果涉及不好,引入中介者会使程序变的复杂
# 中介者承担过多责任,是中心化模式,若中介者出现了问题,整个系统将会崩溃


# 案例
# 抽象中介者
class Mediator:
    def __init__(self, name):
        self.name = name

    def send(self, message, role):
        pass


# 抽象角色, 角色要绑定中介, 因此具体角色要传递中介者
class Role(object):
    mediator = None

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


# 具体角色-房东
class LandLord(Role):

    # hire: 出租
    def hire(self, name, address, area, price):
        hire_requirements = '你好{},我是房东{},我的房子在{},面积是{},租金是{}'.format(self.mediator.estate_brokers_name,
                                                                     name, address, area, price)
        return hire_requirements


# 具体角色-租客
class Tenant(Role):
    def rent_seeking(self, name, address, area, price):
        rent_requirements = '你好{},我是租客{},我的想租房在{},面积是{},租金是{}'.format(self.mediator.estate_brokers_name,
                                                                      name, address, area, price)
        return rent_requirements


# 具体中介类-房地产中介
class EstateBrokers(Mediator):

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

    def introSelf(self):
        print('您好,我是自如公司的{},以后我来为您找到合适的房子或合适的租客'.format(self.estate_brokers_name))
        print("-" * 50)

    def Send(self, name, message):
        if name == 'landlord':
            print('房东你好,已收到你的放租消息,我马上联系租客')
            print('%s 房东消息: %s' % (name, message))
        else:
            print('租客你好,已收到你的求租消息,我马上联系房东')
            print('%s 租客消息: %s' % (name, message))


if __name__ == '__main__':
    # 房地产中介
    broker = EstateBrokers('broker_9527')
    broker.introSelf()

    # 房东, 房东要绑定要中介
    landlord = LandLord(broker)
    hire_requirements = landlord.hire('landlord', '北京市海淀区西二旗大厂科技园旁边的程序猿小区两室一厅', '80', '8000')
    broker.Send('landlord', hire_requirements)
    print('-' * 50)

    # 租户, 租户要绑定要中介
    tenant = Tenant(broker)
    tenant_requirements = tenant.rent_seeking('tenant', '大厂科技园周边三公里内交通便捷主卧', '25', '4500')
    broker.Send('tenant', tenant_requirements)
    print('-' * 50)


# 您好,我是自如公司的broker_9527,以后我来为您找到合适的房子或合适的租客
# --------------------------------------------------
# 房东你好,已收到你的放租消息,我马上联系租客
# landlord 房东消息: 你好broker_9527,我是房东landlord,我的房子在北京市海淀区西二旗大厂科技园旁边的程序猿小区两室一厅,面积是80,租金是8000
# --------------------------------------------------
# 租客你好,已收到你的求租消息,我马上联系房东
# tenant 租客消息: 你好broker_9527,我是租客tenant,我的想租房在大厂科技园周边三公里内交通便捷主卧,面积是25,租金是4500

  

 

posted @ 2020-08-25 18:35  Adamanter  阅读(159)  评论(0)    收藏  举报