代理通常就是一个介于寻求方和提供方之间的中介系统。其核心思想就是客户端(寻求方)没有直接和提供方(真实对象)打交道,而是通过代理对象来完成提供方提供的资源或操作。
代理其实就是封装实际服务对象的包装器或代理人。代理可以为其包装的对象提供附加功能,而无需改变此对象的代码。代理模式的主要目的是为其他对象提供一个代理者或占位符,从而控制对实际对象的访问。
三种常见的不同类型或不同应用场景下的代理:
代理模式注意点:
简单示例:
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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Python笔记之facade模式,包括了Python笔记之facade模式的使用技巧和注意事项,需要的朋友参考一下 facade模式,即门面模式,也称外观模式,这个模式的核心思想是使用facade对象为外部客户端提供一个统一的访问一组子系统的接口,即客户端不会直接与各个子系统交互,而是通过facade对象与各个子系统进行通信并使用子系统的相应功能。 可以通过下面这个图来理解faca
本文向大家介绍Python笔记之工厂模式,包括了Python笔记之工厂模式的使用技巧和注意事项,需要的朋友参考一下 工厂模式: “工厂”即表示一个负责创建其他类型的对象的类,通常情况下,一个工厂的对象会有一个或多个方法与之关联,这些方法用于创建不同类型的对象,工厂对象会根据客户端给方法传递的不同的参数或者客户端调用不同的方法返回不同的对象。 优点:对象的创建是可以根据需要单独创建的,但是使用工厂模
本文向大家介绍Python笔记之观察者模式,包括了Python笔记之观察者模式的使用技巧和注意事项,需要的朋友参考一下 观察者模式中的主题对象一般存在着一个其他服务依赖的核心服务,并且维护着其他依赖此核心服务的对象列表(即观察者或监视者列表),当主题对象发生变化时,观察者应该改变自己的状态或者进行某些操作 观察者模式中的三个角色: 主题:即观察者观察的对象,一般是需要有注册和注销方法,用来添加观察
本文向大家介绍js学习笔记之事件处理模型,包括了js学习笔记之事件处理模型的使用技巧和注意事项,需要的朋友参考一下 在各种浏览器中存在四种事件模型:原始事件模型、标准事件模型、IE事件模型,还有一种Netscape4事件模型,下面具体介绍一下。 1、目前共存在四种事件处理模型分别是:原始事件模型、标准事件模型、IE事件模型,还有一种Netscape4事件模型,但基本可忽略 2、事件处理模型又可以分
本文向大家介绍Python学习笔记之os模块使用总结,包括了Python学习笔记之os模块使用总结的使用技巧和注意事项,需要的朋友参考一下
本文向大家介绍NodeJS学习笔记之MongoDB模块,包括了NodeJS学习笔记之MongoDB模块的使用技巧和注意事项,需要的朋友参考一下 一,开篇分析 这篇属于扩展知识篇,因为在下面的文章中会用到数据库操作,所以今天就来说说它(Mongodb模块)。 (1),简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 Mo