微信制作微网站开发高端网站建设熊掌号
news/
2025/10/1 18:37:57/
文章来源:
微信制作微网站开发,高端网站建设熊掌号,装饰公司简介,品牌网站建设 app建设1. 前言上篇文章 写到了 Python 最常用的 2 种设计模式#xff0c;单例模式和工厂模式本篇文章我们继续聊聊面试中#xff0c;Python 面试经常被问到的设计模式#xff0c;即#xff1a;构建者模式代理模式观察者模式2. 构建者模式构建者模式#xff0c;是将一个复杂对象的…1. 前言上篇文章 写到了 Python 最常用的 2 种设计模式单例模式和工厂模式本篇文章我们继续聊聊面试中Python 面试经常被问到的设计模式即构建者模式代理模式观察者模式2. 构建者模式构建者模式是将一个复杂对象的构造与表现进行分离利用多个步骤进行创建同一个构建过程可用于创建多个不同的表现简单来说就是将一个复杂对象实例化的过程按照自己的想法一步步设置参数定制一个我们需要的对象构建者模式一般由 Director(指挥官)和 Builder(建设者)构成其中Builder 用于定义目标对象部件的方法和参数Director 用于构造一个 Builder 的接口由 Director 去指导 Builder 生成一个复杂的对象以购买一辆车( 包含准备钱、看车、试驾、购买 4 个步骤)为例首先定义一个车的实体并定义属性变量class Car(object):def __init__(self):# 准备的钱self.money None# 去哪里看车self.address None# 试驾什么车self.car_name None# 购买时间是self.buy_time Nonedef __str__(self):return 准备了%s,去%s看车试驾了%s,下单了购买时间是%s % (self.money, self.address, self.car_name, self.buy_time)然后创建一个 Builder实例化一个 Car 对象针对上面 4 个步骤通过定义 4 个方法分别是准备多少钱、去哪里看车、试驾什么车、下单购买的时间# 创建者class CarBuilder(object):def __init__(self):self.car Car()def ready_money(self, money):准备的金额:param money::return:self.car.money moneysleep(0.5)return selfdef see_car(self, address):去哪里看车:param address::return:self.car.address addresssleep(0.5)return selfdef test_drive(self, car_name):试驾了什么车:param car_name::return:self.car.car_name car_namesleep(0.5)return selfdef buy_car(self, buy_time):下单时间:param buy_time::return:self.car.buy_time buy_timesleep(0.5)return self接着创建 Director创建 build 方法使用 Builder 一步步构建一个车对象并返回class Director(object):def __init__(self):self.builder Nonedef build(self, builder):self.builder builderself.builder. \ready_money(100万). \see_car(4S店). \test_drive(奥迪Q7). \buy_car(2020年8月1日)# 返回构建的对象return self.builder.car最后使用的时候只需要实例化一个 Builder 对象和 Director 对象然后通过 Director 对象构建一个车对象即可if __name__ __main__:# 实例化一个构建者对象car_builder CarBuilder()# 实例化一个负责人director Director()# 构建的对象car director.build(car_builder)print(car)3. 代理模式代理模式会引入一个代理对象以代替真实的对象解耦调用方和被调用方之间的联系Python 中的实现方式也简单易懂首先我们定义一个真实对象实体类并定义一个方法class RealObject(object):实际对象def __init__(self, arg):self.arg argdef foo(self):print(参数值为:, self.arg)然后创建一个代理对象在初始化函数 init 中拿到真实对象的实例定义一个相同的方法并调用真实对象的方法class ProxyObject(object):代理对象def __init__(self, real_object):self.real_object real_objectdef foo(self):# 实际对象调用self.real_object.foo()最后的使用方式如下if __name__ __main__:# 实例化代理对象proxy_object ProxyObject(RealObject(AirPython))# 调用方法proxy_object.foo()如此就实现了代理替换真实对象的目的4. 观察者模式观察者模式在 Python 中很常见会定义了对象之间的一对多依赖关系当被观察者(也称为主体对象)改变状态时其他所有观察者都会收到事件并处理预定的事情首先我们创建一个观察者在初始化函数中注册到被观察对象上并且自定义一个更新函数# 观察者class Observer(object):def __init__(self, subject):# 初始化观察者并注册subject.register(self)def update(self, arg1):获取通知print(观察者收到监听消息参数为, arg1)然后新建一个被观察对象创建注册观察者、注销观察者方法class Subject(object):def __init__(self):# 所有的观察者self.observers []self.foo Nonedef register(self, observer):添加观察者if observer not in self.observers:self.observers.append(observer)else:print(已经存在添加失败)def unregister(self, observer):注销观察者try:self.observers.remove(observer)except ValueError:print(注销观察者失败)接着通过模拟修改变量的值通知给所有的观察者def notify(self):通知所有的观察者for item in self.observers:item.update(self.foo)def modify_value(self):修改变量的值:return:self.foo 公众号AirPython# 修改后通知所有观察者self.notify()最后的使用方式如下if __name__ __main__:# 主体对象subject Subject()# 观察者observer Observer(subject)# 测试subject.modify_value()5. 最后这两篇一共介绍了 5 种设计模式它们在 Python 的各领域中被广泛使用也是面试中最常被问到的几种设计模式我已经将文中全部源码上传到后台关注公众号后回复「 设计模式 」即可获得全部源码如果你觉得文章还不错请大家 点赞、分享、留言下因为这将是我持续输出更多优质文章的最强动力
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924135.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!