"""
中介模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互
"""class HouseInfo:"""房源信息"""def __init__(self, area, price, has_window, has_bathroom, has_kitchen, address, owner):self.__area = areaself.__price = priceself.__has_window = has_windowself.__has_bathroom = has_bathroomself.__has_kitchen = has_kitchenself.__address = addressself.__owner = ownerdef get_address(self):return self.__addressdef 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 = namedef get_name(self):return self.__namedef 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 descriptiondef get_match_info(self, search_condition):"""根据房源信息的各项属性查找最匹配的信息,此处省略匹配过程,全部输出"""print(self.get_name(), "为您找到以下最合适的房源: ")for info in self.__houses_info:info.show_info()return self.__houses_infodef 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 = nameself.__house_info = Nonedef get_name(self):return self.__namedef 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 = namedef get_name(self):return self.__namedef 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()
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!