代理通常就是一个介于寻求方和提供方之间的中介系统。其核心思想就是客户端(寻求方)没有直接和提供方(真实对象)打交道,而是通过代理对象来完成提供方提供的资源或操作。
代理其实就是封装实际服务对象的包装器或代理人。代理可以为其包装的对象提供附加功能,而无需改变此对象的代码。代理模式的主要目的是为其他对象提供一个代理者或占位符,从而控制对实际对象的访问。
三种常见的不同类型或不同应用场景下的代理:
代理模式注意点:
简单示例:
from abc import ABCMeta, abstractmethod class HouseOwner(metaclass=ABCMeta): """房主抽象类:都可以将房子出租""" @abstractmethod def rent_house(self, rental): pass class Landlord(HouseOwner): """真实对象:房主""" def __init__(self): self.account = 0 self.house_key = 'house key' def rent_house(self, rental): """收取租金,并房屋钥匙给出租的人""" self.account += rental return self.house_key class HouseAgent: """代理类:中介,代理房东出租他们的房子""" def __init__(self): self.account = 0 self.house_resource = [] # 房源肯定不只一个,这里就只简单放一个了 self.house_resource.append(Landlord()) # 通常而言,代理类和表示真实对象的类具有相同的接口 # 表示此方法给真实对象某个操作进行的代理操作 def rent_house(self, rental, agency_fee): """收取租金和中介费,并将房子出租给客户""" self.account += agency_fee house_key = self.house_resource[0].rent_house(rental) return house_key class Renter: """客户端类:租户""" def __init__(self): self.account = 10000 self.house_key = None self.house_agent = HouseAgent() def find_house(self): """在某一个中介(代理对象)处出租房子""" self.house_key = self.house_agent.rent_house(3000, 1000) print("You've rented a house!") if __name__ == '__main__': renter = Renter() renter.find_house()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。