经典的设计模式和Python示例(一)

news2024/9/23 23:29:34

目录

一、工厂模式(Factory Pattern)

 二、单例模式(Singleton Pattern)

三、观察者模式(Observer Pattern) 


一、工厂模式(Factory Pattern)

        工厂模式(Factory Pattern):工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

Python 例子:

class Creator:
    def factory_method(self):
        raise NotImplementedError('Subclasses must implement this method!')
 
class ConcreteProductA(Creator):
    def factory_method(self):
        return ProductA()
 
class ConcreteProductB(Creator):
    def factory_method(self):
        return ProductB()
 
class ProductA:
    pass
 
class ProductB:
    pass
 
def client_code(creator):
    product = creator.factory_method()
    product.do_something()
 
# 使用
creator_a = ConcreteProductA()
client_code(creator_a)
 
creator_b = ConcreteProductB()
client_code(creator_b)

 二、单例模式(Singleton Pattern)

        单例模式(Singleton Pattern):单例模式是一种创建型模式,它确保一个类只有一个实例,并提供一个全局访问点。

Python 例子:

class Singleton:
    _instance = None
 
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance
 
singleton_instance = Singleton()
another_instance = Singleton()
 
# singleton_instance 和 another_instance 是同一个实例
print(singleton_instance is another_instance)  # 输出: True

三、观察者模式(Observer Pattern) 

        观察者模式(Observer Pattern):观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生改变时,它的所有依赖者(观察者)都会收到通知并自动更新。

Python 例子:

class Subject:
    def __init__(self):
        self._observers = []
 
    def attach(self, observer):
        self._observers.append(observer)
 
    def notify(self):
        for observer in self._observers:
            observer.update()
 
class Observer:
    def update(self):
        raise NotImplementedError('Subclasses must implement this method!')
 
class ConcreteObserver(Observer):
    def update(self):
        print('Observer received an update!')
 
# 使用
subject = Subject()
observer = ConcreteObserver()
subject.attach(observer)
subject.notify()  # 输出: Observer received an update!

代码之美,在于创造无限可能!

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

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

相关文章

我独自升级崛起下载教程 我独自升级崛起一键下载

动作RPG游戏基于广大喜爱的动画和在线漫画《我独自升级崛起》在5月8日,这款新的游戏首次在全球亮相,意在给那些对游戏情有独钟的玩家带来更加丰富和多种多样的游戏体验。这个网络武侠题材的游戏设计非常具有创意,其主要故事围绕着“独孤求败”…

使用CUDA的PyTorch进行张量重整化的gpu加速

使用CUDA的PyTorch进行张量重整化的gpu加速 摘要IntroductionAlgorithm and TorchTrg discussionModels and Results GPU-Acceleration of Tensor Renormalization with PyTorch using CUDA 摘要 作者展示了基于张量重整化群(TRG)方法的数值计算可以通过…

鸿蒙OpenHarmony南向:【Hi3861开发板介绍】

Hi3861开发板介绍 简介 Hi3861开发板是一片大约2cm*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持,并配套提供开放、易用的开发和调试运行环境。 …

Mysql8本地安装

官网: https://www.mysql.com/ yum安装下载:https://dev.mysql.com/downloads/repo/yum/ 二进制安装下载:https://downloads.mysql.com/archives/community/ 安装包下载 yum安装下载 打开网址(https://dev.mysql.com/downloads/r…

GEE错误——image.reduceRegion is not a function

简介 image.reduceRegion is not a function 这里的主要问题是我们进行地统计分析的时候,我们的作用对象必须是单景影像,而不是影像集合 错误"image.reduceRegion is not a function" 表示你正在尝试使用reduceRegion()函数来处理图像数据&…

VastGaussian:用于大型场景重建的巨大3D高斯函数

VastGaussian:用于大型场景重建的巨大3D高斯函数 摘要IntroductionRelated WorkPreliminariesMethod VastGaussian: Vast 3D Gaussians for Large Scene Reconstruction. 摘要 现有基于NeRF的大型场景重建方法在视觉效果和渲染速度方面往往存在限制。虽然最近的3D高斯分裂在小…

宝兰德通过广东教育行业信创适配认证,拓展教育信创生态圈

近日,由宝兰德自主研发的多款中间件产品通过广东省教育行业信创适配中心的适配测试。测试表明,宝兰德四款中间件产品(分布式缓存软件V3.0、应用服务器软件V9.5、消息中间件软件 V2.1、Web服务器软件V3.1) 与当前主流国产操作系统统…

SpringBoot集成阿里云短信验证码服务

一:前言 最近在项目开发过程中,需要去写一个发送手机短信验证码的功能。在网上查了一下,有很多服务器可供选择,本文的话是基于阿里云服务的短信验证码功能实现。 关于注册和开通服务这些需要操作的,请各位小伙伴参考官…

Flutter开发Dart中的队列(Queue)

文章目录 Dart中的队列(Queue)基本操作示例队列的类型队列的应用总结 Dart中的队列(Queue) 队列是一种抽象的数据结构,遵循“先进先出”(FIFO)的原则。这意味着最早添加的元素将首先被移除。队…

品高虚拟化后端存储的发展演进

在品高虚拟化技术不断发展的过程中,虚拟化的后端存储一直是关注的焦点之一。 本文将从最初的文件存储和NFS开始,追溯到集中式存储SAN,然后选择了Ceph的RBD方式,并最终抵达选择支持vhost协议的后端存储的现状,我们将探…

银价下跌怎么办?现货白银买卖分析方法要掌握

现货白银买卖分析是进行现货白银投资的基础,尤其是近几个交易日现货白银价格出现了下跌后,更加凸显了买卖分析能力在市场中的重要性。不光要会买,还得懂得如何卖。下面我们来介绍2个现货白银买卖分析的方法。 基于RSI指标的现货白银买卖分析。…

python+barcode快速生成条形码(电商测试小工具)

背景 需要测试自助收银机,每次都要在线生成条码,而且生成次数还有限制 需求 满足自定义条形码,可以生成条形码图片 方案 python 3.8以上 barcode 1.0.4 python-barcode 0.15.1 代码 用于生成Code128条形码…

WINDOWS配置IIS

1.安装IIS 1.1.打开启用Windows功能 打开“控制面板” > “程序和功能” > “启用或关闭 Windows 功能”。 1.2.启用IIS功能 打开“控制面板” > “程序和功能” > “启用或关闭 Windows 功能”。 勾选“Internet Information Services”,然后点击“确定…

学习中遇到的问题

1.UFUNCTION() 不是所有函数都能加UFUNCTION()修饰,涉及UE反射机制。 2.初始化用{} 初始化列表 3.创建C文件时修改了路径 这时.cpp文件会报错,只需删掉前面多余路径即可 4.函数的移除 1.虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld() 转而使用…

ai续写软件哪个好?盘点3款经典好用的!

随着科技的不断发展,AI续写软件逐渐成为了许多内容创作者、学生、研究人员等的得力助手。这类软件能够通过机器学习和自然语言处理技术,为用户提供高质量的文本续写服务。但市场上众多的AI续写软件让人眼花缭乱,那么,究竟哪款AI续…

Nftables漏洞原理分析(CVE-2022-32250)

前言 在nftales中存在着集合(sets),用于存储唯一值的集合。sets 提供了高效地检查一个元素是否存在于集合中的机制,它可以用于各种网络过滤和转发规则。 而CVE-2022-32250漏洞则是由于nftables在处理set时存在uaf的漏洞。 环境搭建 ubuntu20 QEMU-4…

透明加密软件选哪个好?选择时一定要注意以下三点

透明加密软件哪个好? 这是许多企事业单位在面临数据防泄漏问题时经常思考的问题。随着信息技术的发展,企业的数据安全变得越来越重要。透明加密技术作为一种有效的数据保护手段,被越来越多的企业所采用。然而,市场上的透明加密软…

项目实战 | 如何恰当的处理 Vue 路由权限

前言 哈喽,小伙伴你好,我是 嘟老板。最近接了一个成本千万级的前端项目运维工作,本着 知己知彼 的态度,我将整个前端的大致设计思路过了一遍。不看不知道,一看…吓一跳。光是 路由权限 这块儿的设计,都让我…

Q1保健品线上市场分析(一):护眼需求不减,叶黄素软糖卖爆!

如今网络时代的高速发展,用眼过度逐渐成为国人的常态,无论是儿童还是青少年、成年人、老年人,都可能面临眼部健康的问题。 在这样的大环境下,预防大于治疗的概念不断深入日常生活,进而推动了护眼产品市场的高速发展&a…

1W 3KVDC 隔离 稳压单输出 DC/DC 电源模块 ——TPV-SAR 系列

TPV-SAR系列产品是专门针对PCB上分布式电源系统中需要与输入电源隔离且输出精度要求较高的电源应用场合而设计。该产品适用于;1)输入电源的电压变化≤5%;2)输入输出之前要求隔离电压≥3000VDC;3)对输出电压…