阶段二:进阶知识(掌握Python的常用设计模式)

Python中常用的设计模式包括工厂方法模式。

工厂方法模式是一种创建型模式,它提供了一种创建对象的接口,但具体创建的对象类型可以在运行时决定。这种模式使得创建对象的行为延迟到其子类中,使得代码更加灵活、可扩展和维护性更高。

在Python中,实现工厂方法模式的关键是将创建对象的代码转移到子类中,通过让子类实现一个工厂方法来返回特定类型的对象。下面是一个简单的Python示例,展示了如何使用工厂方法模式:

from abc import ABC, abstractmethodclass Animal(ABC):@abstractmethoddef speak(self):passclass Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"class AnimalFactory(ABC):@abstractmethoddef create_animal(self):passclass DogFactory(AnimalFactory):def create_animal(self):return Dog()class CatFactory(AnimalFactory):def create_animal(self):return Cat()if __name__ == "__main__":animal_factory = DogFactory()dog = animal_factory.create_animal()print(dog.speak()) # Output: Woof!

在上面的示例中,我们定义了一个抽象的Animal类和一个抽象的AnimalFactory类,它们分别表示动物和动物工厂。我们还定义了两个具体的子类DogCat,它们分别实现了Animal类的speak()方法来返回狗和猫的声音。接下来,我们定义了两个具体的工厂类DogFactoryCatFactory,它们分别实现了AnimalFactory类的create_animal()方法来创建狗和猫的对象。最后,我们使用DogFactory来创建一个狗对象,并调用其speak()方法来输出狗的声音。

通过使用工厂方法模式,我们可以将创建对象的代码集中到一个工厂类中,使得代码更加清晰、易于维护和扩展。同时,由于具体创建的对象类型在运行时决定,我们可以灵活地创建不同的对象,从而实现更加灵活和可复用的代码。

当然,除了工厂方法模式,Python中还有许多其他常用的设计模式。接下来我将介绍其中一些:

1. 单例模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。这对于管理全局资源或状态非常有用。

class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls, *args, **kwargs)return cls._instance

2. 观察者模式(或发布-订阅模式)

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,其相关依赖对象皆会得到通知并被自动更新。

class Observable:def __init__(self):self._observers = []def subscribe(self, observer):self._observers.append(observer)def unsubscribe(self, observer):self._observers.remove(observer)def notify(self, *args, **kwargs):for observer in self._observers:observer.update(*args, **kwargs)class Observer:def update(self, *args, **kwargs):pass

3. 装饰器模式

装饰器模式允许你动态地添加或修改行为。在Python中,这通常通过函数装饰器来实现。

def my_decorator(func):def wrapper(*args, **kwargs):print("Before function call")result = func(*args, **kwargs)print("After function call")return resultreturn wrapper

4. 策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。

from abc import ABC, abstractmethodclass Strategy(ABC):@abstractmethoddef execute(self):passclass ConcreteStrategyA(Strategy):def execute(self):return "Strategy A"class ConcreteStrategyB(Strategy):def execute(self):return "Strategy B"

5. 适配器模式

适配器模式用于将一个类的接口转换成客户端所期望的另一个接口形式,使得原本由于接口不兼容而无法一起工作的那些类可以一起工作。这通常用于封装有缺陷的类、接口不一致的类或第三方组件。

6. 建造者模式(或生成器模式)

建造者模式用于构造复杂对象。它允许你逐步构造对象并通过相同的构建过程得到不同的表示。这通常用于创建具有许多参数的对象,或者创建具有许多可选组件的对象。通过建造者模式,你可以使用相同的构建过程来创建不同的对象。这可以提高代码的可读性和可维护性,因为你可以将对象的构造逻辑与其表示逻辑分开。它通常包含四个部分:抽象建造者、具体建造者、产品(最终要构建的对象)和指挥者(负责安排构建过程)。在Python中,你可以通过类和函数来实现建造者模式。具体实现过程可能会有些复杂,但通过这种方式,你可以创建高度定制化的复杂对象。总的来说,设计模式是解决特定问题的最佳实践。通过学习和应用设计模式,你可以写出更加健壮、可维护和可扩展的代码。在Python中,这些设计模式可以通过类和函数的不同组合来实现,以满足你的特定需求。

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

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

相关文章

GCM的Counter模式加密与解密java实现

GCM即Galois/Counter Mode,指的是加密采用Counter模式,并且带有GMAC消息认证码 import lombok.extern.slf4j.Slf4j;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.GCMParam…

详解二叉树

【本节目标】 1.树的概念和结构 2.二叉树的概念和结构 3.二叉树的顺序结构及实现 4.二叉树的链式结构及实现 1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构,它由一个根结点和n(>0)个子树构成,之所以叫做树,是因为它很像生活…

ArkTS开发webview,html页面中的input和按钮等操作均无响应 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案(根据此方法即可解决此Bug):本文相关知识本Bug常规排除步骤ArkTS项目场景: 在鸿蒙开发过程遇到的问题: 问题 ArkTS API9 使用webview加载的html,页面中的按钮和input等操作均无响应 是有相关API设置webview是否可以touch或…

Hive数据库与表操作

文章目录 一、准备工作二、Hive数据库操作(一)Hive数据存储(二)创建数据库(三)查看数据库(四)修改数据库信息 一、准备工作 二、Hive数据库操作 (一)Hive数据…

Python Selenium 图片资源自动搜索保存 项目实践

实现访问首页 from os.path import dirnamefrom selenium import webdriverclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self):"""初始化"""self.driver webdriver.Chrome(executable_pa…

Jsch 使用过程中遇到的问题及解决方法

Jsch 使用过程中遇到的问题及解决方法 使用版本 //maven <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>//gradle implementation com.jcraft:jsch:0.1.…

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )FPGA部分

一、实验目的 1、掌握用SSI(小规模集成电路)逻辑器件设计组合电路的方法。 2、掌握组合逻辑电路的调试方法。 3、学会分析和解决实验中遇到的问题。 4、学会用FPGA实现本实验内容。 二、实验原理 包括:原理图绘制和实验原理简述 1、1位半加器 2、1位全加器 3、三…

数据结构 / day03作业

1.顺序表按元素删除 //main.c#include "head.h" int main(int argc, const char *argv[]) {sqlist *listcreate_space();// printf("&list%p\n", list);int n;int index;data_type element, key;printf("please input n;");scanf("%d&…

2021年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

文章目录 2021年全国硕士研究生入学招生考试英语二试题SectionⅠUse of EnglishSection Ⅱ Reading ComprehensionText 1Text 2Text 2Text 3Text 4 Section III TranslationSection Ⅳ Writing 2021年全国硕士研究生入学招生考试英语二试题 SectionⅠUse of English Directio…

oracle数据库备份2(expdp)

使用exp命令定时进行数据库备份的操作前面已经记录过&#xff1a; oralce数据库定时备份 下面记录下使用更加高效的expdp命令和impdp&#xff0c;这两个命令同样是用来做数据库备份和还原的&#xff0c;但速度更快&#xff0c;效率更高&#xff0c;缺点是只能用在服务器端进行…

在JavaScript中添加css样式 js追加类

一、原生js中添加类的方法 1.为 <div> 元素添加一个类: document.getElementById("div").classList.add("类名"); 2.为 <div> 元素添加多个类: document.getElementById("div").classList.add("类名1","类名2"…

阿里云ACE认证之国际版与国内版对比!

大厂疯狂裁员&#xff0c;互联网行业迎来寒冬&#xff0c;技术人员被动陷入疯狂内卷。在愈加内卷的IT领域&#xff0c;“云计算”作为少有的蓝海&#xff0c;无疑是打工人未来实现职场提升、摆脱内卷的绝佳选择&#xff01; 对于云计算行业的人来说&#xff0c;最值得考的肯定是…

洪泽湖流域建筑物、人口密度与土地利用数据技术服务

一&#xff0e;背景介绍 人类社会发展离不开土地&#xff0c;没有土地就没有人类&#xff0c;土地利用随着人类的出现而发生。人类为了一定的社会或经济方面的目的&#xff0c;会通过利用、改造等活动。从土地上获得更多的资源。土地利用既要受自然条件的制约&#xff0c;同时也…

2023年国赛试题:配置inux1 为 CA 服务器

试题内容:配置 linux1 为 CA 服务器,为 linux 主机颁发证书。证书颁发机构有 效期 10 年,公用名为 linux1.skills.lan。申请并颁发一张供 linux 服务器使用的证书,证书信息:有效期 =5 年,公用名=skills.lan, 国家=CN,省=Beijing,城市=Beijing,组织=skills,组织单位…

Unity UGUI的自动布局-LayoutGroup(水平布局)组件

Horizontal Layout Group | Unity UI | 1.0.0 1. 什么是HorizontalLayoutGroup组件&#xff1f; HorizontalLayoutGroup是Unity UGUI中的一种布局组件&#xff0c;用于在水平方向上对子物体进行排列和布局。它可以根据一定的规则自动调整子物体的位置和大小&#xff0c;使它们…

亚马逊云科技实现了奇瑞捷豹路虎SAP系统的上云目标并保持成本优化

11月23日&#xff0c;“2023第八届IDC中国数字化转型年度盛典”正式开启并揭晓“2023 IDC中国未来企业大奖-卓越奖”获奖企业&#xff0c;奇瑞捷豹路虎汽车有限公司&#xff08;以下简称“奇瑞捷豹路虎”&#xff09;凭借“基于云原生的智慧化运营平台”项目&#xff0c;继获得…

自动驾驶HWP功能规范

HWP功能规范 Highway Pilot Functional Specification 文件状态&#xff1a; 【√】草稿 【】正式发布 【】正在修改 文件起草分工 撰写&#xff1a; 审核&#xff1a; 编制&#xff1a; 签名&#xff1a; 日期&#xff1a; 审核&#xff1a; 签名&#xff1a; 日期&am…

企业业务场景如何实现自动化连接?

为什么要实现企业业务场景的自动化连接&#xff1f; 可提高效率&#xff0c;自动化连接可以减少人工操作和手动干预的需求&#xff0c;从而提高业务处理的速度和效率。通过自动化连接&#xff0c;不同的系统、应用程序和流程可以自动协同工作&#xff0c;减少了人工处理的时间和…

【计算机组成原理】存储系统

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理计算机组成原理中 存储系统的知识点和值得注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

打游戏NVIDIA怎么设置性能最好?

打游戏NVIDIA怎么设置性能最好&#xff1f;当前很多用户都在Win10电脑上畅玩游戏&#xff0c;所以想知道NVIDIA控制面板最佳设置方法&#xff0c;更好地发挥NVIDIA控制面板性能&#xff0c;用户就能享受更棒的游戏乐趣。接下来小编给大家详细介绍NVIDIA显卡游戏最佳设置步骤教程…