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

devtools/2024/10/18 9:19:14/

目录

一、工厂模式(Factory Pattern)

 二、单例模式(Singleton Pattern)

三、观察者模式(Observer Pattern) 


一、工厂模式(Factory Pattern)

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

Python 例子:

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:passclass ProductB:passdef 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 例子:

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

三、观察者模式(Observer Pattern) 

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

Python 例子:

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.ppmy.cn/devtools/36385.html

相关文章

关于MS-DOS时代的回忆

目录 一、MS-DOS是什么? 二、MS-DOS的主要功能有哪些? 三、MS-DOS的怎么运行的? 四、微软开源MS-DOS源代码 五、高手与漂亮女同学 一、MS-DOS是什么? MS-DOS(Microsoft Disk Operating System)是微软公…

简单实用的倾斜摄影实景三维模型Web端展示管理方法,还不赶紧试试吗?

四维轻云是一款地理空间数据在线管理平台,具有地理空间数据在线管理、浏览及分享等功能。在四维轻云平台中,用户可以不受时间地点的限制,随时随地上传倾斜摄影实景三维模型、激光点云、正射影像、数字高程模型、航拍原片、人工模型和矢量数据…

华为OD机试【路灯照明问题】(java)(100分)

1、题目描述 在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。 2、输入描述 第一行为一个数N&#xff…

2024年如何下载51cto的视频

你是否对学习新的技术知识感到困惑?是否在寻找一个优质的在线学习平台?那么,我告诉你一个秘密——51cto视频平台!它是一个专注于技术领域的视频平台,提供了大量的高质量视频资源。如果你想在2024年下载51cto的视频&…

数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库

前言 自从Oracle收购了Mysql对其进行了商业化之后,如今Mysql已经不能算一个完全开源的数据库了,而这明显是与Qt开源理念相违背的,所以Qt6中取消了对Mysql的默认支持,Qt6内不在内置Mysql的驱动(QMYSQL),这也导致了我们如果想要连接…

EasyExcel读取数据,并发送请求

1.导入实体类 package com.oristand.b2b.manage.web;import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter;Getter Setter EqualsAndHashCodepublic class TestData {Excel…

在Vue项目中,`App.vue`、`main.ts`(或`main.js`)以及`index.html`的作用

在Vue项目中,App.vue、main.ts(或main.js)以及index.html各自承担着不同的作用,它们共同协作以启动和运行Vue应用。下面是每个文件的具体作用和它们之间的区别: ### App.vue App.vue 是Vue应用的根组件,它…

推荐5个免费的国内平替版GPT

提起AI,大家第一个想到的就是GPT。 虽然它确实很厉害,但奈何于我们水土不服,使用门槛有些高。 不过随着GPT的爆火,现在AI智能工具已经遍布到各行各业了,随着时间的推移,国内的AI工具也已经“百花盛放”了…