"""
中介模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,
从而使其耦合松散,而且可以独立地改变他们之间的交互
"""
class HouseInfo:
"""房源信息"""
def __init__(self, area, price, has_window, has_bathroom, has_kitchen, address, owner):
self.__area = area
self.__price = price
self.__has_window = has_window
self.__has_bathroom = has_bathroom
self.__has_kitchen = has_kitchen
self.__address = address
self.__owner = owner
def get_address(self):
return self.__address
def get_owner_name(self):
return self.__owner.get_name()
def show_info(self, is_show_owner=True):
template = "面积: {}平方米, 价格: {}元, 窗户: {}, 卫生间: {}, 厨房: {}, 地址: {}, 房东: {}."
print(template.format(self.__area,
self.__price,
'有' if self.__has_window else '无',
self.__has_bathroom,
'有' if self.__has_kitchen else '无',
self.__address,
self.get_owner_name() if is_show_owner else ''))
class HousingAgency:
"""房屋中介"""
def __init__(self, name):
self.__houses_info = []
self.__name = name
def get_name(self):
return self.__name
def add_house_info(self, house_info):
self.__houses_info.append(house_info)
def remove_house_info(self, house_info):
for info in self.__houses_info:
if info == house_info:
self.__houses_info.remove(info)
# 边遍历边删除
def get_search_condition(self, description):
"""省略将用户描述信息转换成搜索条件的过程"""
return description
def get_match_info(self, search_condition):
"""根据房源信息的各项属性查找最匹配的信息,此处省略匹配过程,全部输出"""
print(self.get_name(), "为您找到以下最合适的房源: ")
for info in self.__houses_info:
info.show_info()
return self.__houses_info
def sign_contract(self, house_info, period):
"""与房东签订协议"""
template = "{}与房东{}签订{}的房子的租赁合同,租期{}年,合同期内{}有权对其进行使用和转租。"
print(template.format(self.get_name(),
house_info.get_owner_name(),
house_info.get_address(),
period,
self.get_name()))
def sign_contracts(self, period):
for info in self.__houses_info:
self.sign_contract(info, period)
class HouseOwner:
"""房东"""
def __init__(self, name):
self.__name = name
self.__house_info = None
def get_name(self):
return self.__name
def set_house_info(self, address, area, price, has_window, bathroom, kitchen):
self.__house_info = HouseInfo(area, price, has_window, bathroom, kitchen, address, self)
def publish_house_info(self, agency):
# 发布房源
agency.add_house_info(self.__house_info)
template = "{}在{}发布房源出租信息。"
print(template.format(self.get_name(), agency.get_name()))
class Customer:
"""租客"""
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def find_house(self, description, agency):
template = "我是{},我想找一个{}的房子"
print(template.format(self.get_name(), description))
return agency.get_match_info(agency.get_search_condition(description))
def see_house(self, houses_info):
# 看房,选择最合适的房子,省略看房选房的过程,直接选择最后一个间
return houses_info[-1]
def sign_contract(self, house_info, agency, period):
# 与中介签订协议
template = "{}与中介签订{}房子的租赁合同,租期{}年。合同期内{}有权对其进行使用!"
print(template.format(self.get_name(),
agency.get_name(),
period,
self.get_name()))
def test_renting():
my_home = HousingAgency("我爱我家")
zhangsan = HouseOwner("张三")
zhangsan.set_house_info("上地西亚", 20, 2500, 1, '独立卫生间', 0)
zhangsan.publish_house_info(my_home)
lisi = HouseOwner("李四")
lisi.set_house_info('当代城市家园', 16, 1800, 1, '公用卫生间', 0)
lisi.publish_house_info(my_home)
wangwu = HouseOwner('王五')
wangwu.set_house_info('金隅美和园', 18, 2600, 1, '独立卫生间', 1)
wangwu.publish_house_info(my_home)
print()
my_home.sign_contracts(3)
tony = Customer('Tony')
houses_info = tony.find_house('20平米左右,要有独立卫生间、厨房,房间有床,朝南,价格不高于2000!', my_home)
appropriate_house = tony.see_house(houses_info)
tony.sign_contract(appropriate_house, my_home, 1)
if __name__ == '__main__':
test_renting()