迅速建设企业网站成都酒店设计十大公司排名

diannao/2025/10/13 11:38:22/文章来源:
迅速建设企业网站,成都酒店设计十大公司排名,google seo教程,seo优化平台4.11 设计模式 在Python中#xff0c;类的设计模式是指一种通用的解决方案或设计模板#xff0c;针对特定的问题或需求构建类结构#xff0c;并提供相关的方法和属性。这些设计模式可以帮助开发人员遵循最佳实践、提高代码质量、增强可读性、降低维护成本。 需要注意的是类的设计模式是指一种通用的解决方案或设计模板针对特定的问题或需求构建类结构并提供相关的方法和属性。这些设计模式可以帮助开发人员遵循最佳实践、提高代码质量、增强可读性、降低维护成本。 需要注意的是类设计模式不是语言特定的这些模式同样适用于其他面向对象编程语言。 在 Python 中有多种常见的类设计模式。下面将进行介绍。 4.11.1 工厂模式Factory Pattern 用于创建对象实例的模式简化了对象的创建过程。 在Python中类设计的工厂模式是一种创建对象的方法。它可以使用一个公共接口来创建不同的对象这些对象通常共享相同的属性和行为。更具体地说工厂模式可以通过使用过程化编程技术和面向对象编程技术来实现。 下面是一个示例 class Dog:def __init__(self, name):self._name namedef speak(self):return Woof!class Cat:def __init__(self, name):self._name namedef speak(self):return Meow!def get_pet(petdog):pets dict(dogDog(Hope), catCat(Peace))return pets[pet]dog get_pet(dog) print(dog.speak())cat get_pet(cat) print(cat.speak())在上述代码中我们定义了两个类Dog和Cat每个类都有它自己的__init__函数和speak方法。然后我们定义了一个get_pet函数该函数接收一个参数pet并根据传递的值获取pets字典中对应的实例赋值给dog或者cat变量中。 如果传入的pet参数是dog那么将调用get_pet函数并返回一个Dog对象而如果传入的参数是cat那么会返回一个Cat对象。最后我们分别调用了dog.speak()和cat.speak()方法输出其对应的声音。 这种设计模式对于以下情况非常有用 当我们需要隐藏对象创建的实现细节时。当我们希望将对象的创建与使用分开时。当我们想要通过公共接口在运行时确定对象类型时。 4.11.2 单例模式Singleton Pattern 确保类只能有一个实例并提供对该实例的全局访问点。 在Python中类设计的单例模式是指一个类只有一个实例对象。这意味着无论如何调用该类在内存中只会存在同一个实例对象如果再次创建该类的实例对象时将返回已经存在的那个。这可以避免在程序中多次创建相同的对象节省资源和提高性能。 下面是一个示例 class Singleton:__instance Nonedef __new__(cls, name):if cls.__instance is None:cls.__instance super().__new__(cls)cls.__instance.__initialized Falsereturn cls.__instancedef __init__(self, name):if not self.__initialized:self.name nameself.__initialized Truedef say_hello(self):print(fHello, I am {self.name} ({id(self)})!)在上述代码中我们定义了一个名为Singleton的类使用了双重判断的方式确保仅创建一个实例对象。在类的__new__方法中如果没有创建过实例对象就通过super()调用父类的__new__方法来创建一个实例对象并将它赋值给__instance属性。若已经创建过实例对象则直接返回现有的那个实例对象。同时类中的__initialized属性用于确保__init__方法只执行一次。 我们还在类的__init__方法中添加了一个名为name的属性以标识该实例的名称。最后我们定义了一个say_hello方法用于输出实例的名称和其在内存中的地址。 下面展示如何使用Singleton类 dog1 Singleton(Hope) dog2 Singleton(Peace)print(id(dog1)) print(id(dog2))dog1.say_hello() dog2.say_hello()print(dog1 dog2)在上述代码中我们先创建了两个实例对象dog1和dog2采用不同的name但是由于是单例模式只有第一次的name能够正常赋值dog2的name则无法再次赋值。最后得到的结果就显示dog1和dog2的id一致say_hello函数返回的也一致。 4.11.3 观察者模式Observer Pattern 在对象之间建立一对多的依赖关系以便当一个对象状态更改时通知其所有依赖项。 在Python中类设计的观察者模式是指当一个对象的状态发生改变时所有依赖它的其他对象都会得到通知并自动更新。 下面是一个示例 class Observer:def update(self, obj, *args, **kwargs):passclass Observable:def __init__(self):self._observers []def addObserver(self, observer):if observer not in self._observers:self._observers.append(observer)def removeObserver(self, observer):if observer in self._observers:self._observers.remove(observer)def notifyObservers(self, obj, *args, **kwargs):for observer in self._observers:observer.update(obj, *args, **kwargs)class Dog(Observable):def __init__(self, namedog):super().__init__()self._name namedef setName(self, name):self._name nameself.notifyObservers(self)def getName(self):return self._nameclass Owner(Observer):def __init__(self, name):self._name namedef update(self, dog, *args, **kwargs):print(f{self._name}: {dog.getName()} seems happy today!)dog1 Dog(Hope) dog2 Dog(Peace) owner1 Owner(Alice) owner2 Owner(Bob)dog1.addObserver(owner1) dog1.addObserver(owner2) dog2.addObserver(owner2)dog1.setName(Happy Hope) dog2.setName(Peaceful Peace)在上面的代码中我们定义了两个类Observer和Observable以及继承自Observable的Dog类和继承自Observer的Owner类。 Observer类中定义了名称为update的方法这是观察者需要实现的方法。在本例中我们没有在其中写入任何代码。 Observable 类实现了添加、删除和通知观察者对象的方法其中addObserver将要添加的观察者放入到观察者列表中。此时观察者可以根据removeObserver则是从观察者列表中剔除。notifyObservers则是通知观察者。 4.11.4 适配器模式Adapter Pattern 将接口转换为其他接口以兼容客户端代码的需求。 适配器模式是一种设计模式它允许我们将一个类的接口转换为另一个客户端所期望的接口。在Python中适配器模式的实现方式通常涉及到继承和组合两种方式。 下面是一个使用继承实现适配器模式的示例假设我们有两个类一个是Adaptee类具有不同于目标客户端所期望的接口 class Adaptee:def specific_request(self):return adaptee code和一个客户端所期望的接口Target class Target:def request(self):pass我们可以通过TargetClassAdapter类来使Adaptee与Target兼容适配器将Adaptee的方法调用转换成Target客户端所期望的接口 class TargetClassAdapter(Target, Adaptee):def request(self):return self.specific_request()这样一来客户端就可以使用TargetClassAdapter类来调用Adatpee的方法同时符合Target接口规范 if __name__ __main__:target TargetClassAdapter()result target.request()print(result) # adaptee code同样我们也可以使用组合方式来实现适配器模式。 4.11.5 组合模式Composite Pattern 通过将对象组合成树形结构使得单个对象和组合对象都可以按统一的方式进行处理。 在Python中组合模式指的是将对象组合成树形结构以表示“部分-整体”的层次结构。组合能让客户端以一致的方式处理个别对象以及对象组合。 以下是使用Python实现组合模式的简单示例 class Component:def __init__(self, name):self.name namedef add(self, component):passdef remove(self, component):passdef display(self, depth):passclass Leaf(Component):def add(self, component):print(Cannot add to a leaf)def remove(self, component):print(Cannot remove from a leaf)def display(self, depth):print(- * depth self.name)class Composite(Component):def __init__(self, name):super().__init__(name)self.children []def add(self, component):self.children.append(component)def remove(self, component):self.children.remove(component)def display(self, depth):print(- * depth self.name)for child in self.children:child.display(depth 2)if __name__ __main__:root Composite(root)root.add(Leaf(leaf A))root.add(Leaf(leaf B))comp Composite(Composite X)comp.add(Leaf(leaf XA))comp.add(Leaf(leaf XB))root.add(comp)root.display(1)在这个例子中Component类代表组合模式中的组件其中包含了添加、删除和显示其内容的方法。Leaf类代表叶节点不能够包含其他的组件。Composite类代表组合节点包含了多个子组件。 在这个示例中创建了一个root组合节点包含两个叶节点Leaf A和Leaf B以及一个名为Composite X的子组合节点。调用display()方法时将按树形结构递归地显示所有组件的内容。 4.11.6 策略模式Strategy Pattern 定义算法族使它们之间可以互相替换而不会影响到客户端的使用。 类的策略模式是一种设计模式它允许在运行时选择算法的不同变体或行为。这个模式中我们将不同的算法或策略封装成不同的类并让他们可以相互替换。 以下是一个简单的代码示例 class Strategy:def do_algorithm(self, data):passclass ConcreteStrategyA(Strategy):def do_algorithm(self, data):return sorted(data)class ConcreteStrategyB(Strategy):def do_algorithm(self, data):return list(reversed(sorted(data)))class Context:def __init__(self, strategy: Strategy):self._strategy strategydef execute_strategy(self, data):return self._strategy.do_algorithm(data)if __name__ __main__:context_a Context(ConcreteStrategyA())result_a context_a.execute_strategy([1, 3, 2])print(result_a)context_b Context(ConcreteStrategyB())result_b context_b.execute_strategy([1, 3, 2])print(result_b)在这个例子中我们定义了一个Strategy的基类和两个具体的策略类:ConcreteStrategyA和ConcreteStrategyB。每个策略类都实现了do_algorithm方法并分别提供了不同的实现。 接着我们定义了一个上下文类Context用来执行策略并生成所需的结果。这个类包含一个指向Strategy对象的引用并在执行方法时将数据传递给所选的策略类进行处理。 最后我们可以创建不同的上下文对象并通过方法的多态性执行相应的策略。这样就可以实现运行时动态选择算法行为的目的。 4.11.7 装饰器模式Decorator Pattern 动态地向对象添加额外的行为而无需修改原始类的代码。 在Python中类设计的装饰器模式是指使用装饰器来修改一个类的行为或属性而不必直接修改该类的原始定义。这可以使代码更加灵活和可维护。 以下是一个实例其中定义了一个名为Logger的装饰器它可以添加记录方法到一个类中 def Logger(cls):A decorator that adds logging functionality to a class# Define the logging methoddef log(self, message):print(f{self.__class__.__name__}: {message})# Add the logging method to the classcls.log log# Return the modified classreturn cls# Define a class with the Logger decorator Logger class MyClass:pass# Use the class and its logging method my_object MyClass() my_object.log(Hello World!)在上面的示例中Logger函数作为一个装饰器来使用用于增加Python类的日志功能。当我们在类定义之前应用此装饰器时Logger函数将自动被调用并向该类添加log方法这个方法可以访问该类的名称和任何传递给它的消息。因此在创建MyClass对象后我们可以调用该对象的log方法并输出一条带有类的名称和消息的日志信息。 4.11.8 建造者模式Builder Pattern 将复杂的对象构建与其表示分离以便不同的表示方式可以用于该对象进行构建。 类设计的建造者模式是一种创建复杂对象的设计模式它使用多个简单的对象逐步构建出一个复杂的对象。这种模式是将一个复杂对象的构建与其表示分离使得同样的构建过程可以创建不同的表示。 在Python中可以用下面的示例演示建造者模式。 class Pizza:def __init__(self, dough, sauce, toppings[]):self.dough doughself.sauce sauceself.toppings toppingsdef __str__(self):return dough: {}, sauce: {}, toppings: {}.format(self.dough, self.sauce, , .join(self.toppings))class PizzaBuilder:def __init__(self):self.pizza Pizza()def set_dough(self, dough):self.pizza.dough doughreturn selfdef set_sauce(self, sauce):self.pizza.sauce saucereturn selfdef add_topping(self, topping):self.pizza.toppings.append(topping)return selfdef build(self):return self.pizzaclass MargheritaPizzaBuilder(PizzaBuilder):def __init__(self):super().__init__()self.pizza.dough thinself.pizza.sauce tomatodef add_toppings(self):self.pizza.toppings.extend([mozzarella, basil])return selfclass PepperoniPizzaBuilder(PizzaBuilder):def __init__(self):super().__init__()self.pizza.dough panself.pizza.sauce tomatodef add_toppings(self):self.pizza.toppings.extend([mozzarella, pepperoni])return selfclass Director:def __init__(self, builderNone):self.builder builderdef set_builder(self, builder):self.builder builderdef construct_pizza(self):if not self.builder:raise ValueError(Builder is not set)self.builder.add_topping().build()在这个例子中PizzaBuilder类可以创建定制并返回Pizza。MargheritaPizzaBuilder、PepperoniPizzaBuilder则创建特定的Pizza。Director类则可以通过传入不同的PizzaBuilder构建出不同的Pizza。使得同样的构建过程创建出不同的Pizza。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西安知名的集团门户网站建设企业沈阳seo网站关键词优化

在ExoPlayer中使用协程:构建强大的Android媒体播放器 现今的移动应用世界中,媒体消费是用户体验的核心部分。无论是流媒体视频、音乐播放还是处理自适应媒体格式,强大的媒体播放器对于提供无缝和愉悦的用户体验至关重要。而在安卓平台上&…

做网站产品图片素材华大基因 建设公司网站

基本步骤:数据清洗→创建TIN→TIN转栅格→等值线→平滑线。 1.(重要)数据清理:删除高程点中的高程异常值数据。 2.创建TIN:系统工具→3D Analyst Tools→数据管理→TIN→创建TIN(可直接搜索工具TIN)。 单击…

徐州网站制作公司哪家好如何给别人做网站赚钱

在职场中,高效沟通是至关重要的。以下是一些建议,帮助你在工作职场中实现高效沟通: 1、明确目标:在开始沟通之前,确保你清楚自己的目标和期望结果。明确你的沟通目的,以便在沟通过程中保持专注和针对性。 2…

天津做网站建设的公司跨境电商购物网站

一、SpringBoot JVM参数配置实战调优 1.1、概述 前面的系列文章大篇幅的讲述了JVM的内存结构以及各种参数,今天就使用SpringBoot项目实战演示一下,如何进行JVM参数调优,如果没有阅读过前面系列文章的朋友,建议先阅读后再看本篇文…

驻马店公司做网站买奢侈品代工厂做的产品的网站

一、检查操作系统是否存在增减文件,是否有shell被上传 要检查操作系统是否存在增减文件或是否有shell被上传,您可以按照以下步骤进行操作: 文件完整性检查: 使用文件系统的完整性检查工具,例如fsck(对于ext…

地方网站如何做竞价php wordpress 模版

Python NumPy 高级教程:性能优化 在处理大规模数据集或进行复杂计算时,性能是关键的考虑因素。NumPy 提供了一些工具和技巧,帮助用户优化代码以提高执行效率。在本篇博客中,我们将深入介绍 NumPy 中的性能优化技术,并…

自助建站免费信息发布网站江西省南昌市建筑工程网

git工作流程 git的安装 1)安装git 2)安装乌龟 3)汉化乌龟创建本地仓库 在一个空目录,打开git bash here, 输入命令 git init 删除并保留本地副本 选中目标文件,右键乌龟,删除并保留本地副本 这…

凡网站建设阿里巴巴全球速卖通

半导体 P、N型半导体 N型半导体 掺入少量杂质磷元素(或锑元素)的硅晶体(或锗晶体)中 电子型半导体其导电性主要是因为自由电子导电 P型半导体 掺入少量杂质硼元素(或铟元素)的硅晶体(或锗…

中国空间站进展奉贤网站建设

一般情况下,引起分配错误的原因是磁盘损坏或突然停电;一致性错误可能是数据库中的表或索引坏,一般都可修复。1、查看红色字体,并把有错误的数据库表名记录下来,或把索引损坏的表名记录下来。2、把数据库设置为单用户模…

怎么建设只要注册就赚钱的网站适合乡镇开的十五种店

目录 一.jdk安装 二.tomcat安装 三.MySQL安装 四.nginx安装 五.Nginx负载均衡tomcat 六.前端部署 一.jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录,将安装包拖进去 2. 解压安装包 这里需要解压到usr/local目录下,在这里新建一个…

四川旅游seo整站优化企业网站推广的策略

第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。第二范式:在第一范式的基础上更进一层,目标是确保表…

网站静态代码检查 站长工具中国工厂网站官方网站

近日,苹果公司发布了iOS 17.5,新版本新增了跨平台的反追踪检测功能。这一功能是与谷歌合作开发的,意味着苹果的“查找我的”和谷歌的新“查找我的设备”网络将携手合作,共同抵制不必要的追踪和骚扰行为。如果检测到非你所有的追踪…

做那种英文网站有流量网站不能正常显示出现后台代码

近日就开始回顾html和css相关知识啦,并且会学习html5和css3的新知识,以下是我对记忆不太深刻的地方以及新知识点的总结: Web标准: 结构:用于对网页元素进行整理和分类,即HTML 表现:用于设置网页…

网站定制哪个好网站域名管理规范

📚📚 🏅我是bing人,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Axure》。🎯🎯 🚀无论你是编程小白,还是有一…

夏家胡同网站建设网络广告图片

目录结构及主要内容“/"根冃录部分有以F子冃录:/usr 口录包含所有的命令、程序库、文档和英它文件。这些文件在正常操作中不会被改变的。这个目录也包含你的Linux 发行版本的主要的应用程序,辔如,Netscape0/var目录包含在1E常操作中被改…

如何设计网站建设引导页wordpress主题配置修改

文章目录 1. 背景2. 数据的定义及分类2.1 数据的定义2.2 数据的分类2.3 数据和信息的区别 3. 数据的作用4. 数据的那些美好时代4.1 人脑时代4.2 文件时代4.3 数据库时代4.3.1 大服务器时代4.3.2 读写分离时代4.4 数据库的分布式时代4.5 云端时代 5. 数据的未来 1. 背景 随着云时…

有网站地图的网站企业推广产品有什么平台好

JSX的由来 DOM元素 组件元素 JSX基本语法 XML基本语法 元素类型 、我们讲到两种不同的元素:DOM元素和组件元素 在JSX里面有对应 注释 元素属性 Boolean属性 展开属性 自定义属性 javascript属性表达式 属性值使用表达式 用{}表示 HTML转义 文章参考深入react学习技术栈

网站建设百度推广开户网站短期培训学校

1.介绍 灰度线性变化是最常用的点运算(对每个像素进行运算)操作之一,灰度线性变化就是将图片的像素值通过指定的线性函数进行变换,以此增强或者减弱图片的灰度。灰度线性变换的公式就是常见的一维线性函数: y_out k…

设计需求网站网站正在建设中页面

近日,由数据猿和上海大数据联盟主办,上海市经济和信息化委员会、上海市科学技术委员会指导的“第六届金猿季&魔方论坛——大数据产业发展论坛”在上海成功举行,吸引了数百位业界精英的参与。中新赛克海睿思作为国内数字化转型优秀厂商代表…

水泵行业网站怎么做重庆工程造价信息官网

使用一个简单的工具类 代码示例: