Python使用抽象工厂模式和策略模式的组合实现生成指定长度的随机数

设计模式选择理由:

  1. 抽象工厂模式

    • 抽象工厂模式适合于创建一组相关或依赖对象的场景。在这里,我们可以定义一个抽象工厂来创建不同类型(数字、字母、特殊符号)的随机数据生成器。
  2. 策略模式

    • 策略模式允许你定义一系列算法,并将每个算法封装起来,使它们可以互相替换。在这里,我们可以使用策略模式来定义不同类型数据的生成算法,例如数字生成策略、字母生成策略、特殊符号生成策略。

示例实现:

下面是一个简单的Python示例,结合抽象工厂模式和策略模式,用于生成随机数


import random
import string# 抽象工厂:数据生成器工厂
class DataGeneratorFactory:def create_generator(self):pass# 具体工厂1:数字数据生成器工厂
class NumberGeneratorFactory(DataGeneratorFactory):def create_generator(self):return NumberGenerator()# 具体工厂2:字母数据生成器工厂
class LetterGeneratorFactory(DataGeneratorFactory):def create_generator(self):return LetterGenerator()# 具体工厂3:特殊符号数据生成器工厂
class SymbolGeneratorFactory(DataGeneratorFactory):def create_generator(self):return SymbolGenerator()# 具体工厂4:字母、数字、特殊符号数据生成器工厂
class LetterNumberSymbolGeneratorFactory(DataGeneratorFactory):def create_generator(self):return LetterNumberSymbolGenerator()# 具体工厂5:指定特殊符号数据生成器工厂
class SymbolAGeneratorFactory(DataGeneratorFactory):def create_generator(self):return SymbolAGenerator()# 抽象产品:数据生成器接口
class DataGenerator:def generate_data(self, length):pass# 具体产品1:数字数据生成器
class NumberGenerator(DataGenerator):def generate_data(self, length):my_list = [random.randint(0, 9) for _ in range(length)]result = int(''.join(map(str, my_list)))return result# 具体产品2:字母数据生成器
class LetterGenerator(DataGenerator):def generate_data(self, length):my_list = [random.choice(string.ascii_letters) for _ in range(length)]result = ''.join(my_list)return result# 具体产品3:特殊符号数据生成器
class SymbolGenerator(DataGenerator):def generate_data(self, length):symbols = string.punctuationmy_list = [random.choice(symbols) for _ in range(length)]result = ''.join(my_list)return result# 具体产品4:字母、数字、特殊符号数据生成器
class LetterNumberSymbolGenerator(DataGenerator):def generate_data(self, length):symbols = string.ascii_letters + string.digits + string.punctuation  # 随机字母+随机数字+随机特殊符号my_list = [random.choice(symbols) for _ in range(length)]result = ''.join(my_list)return result# 具体产品5:指定特殊符号数据生成器
class SymbolAGenerator(DataGenerator):def generate_data(self, length):symbols = "!@#$%^&*()_+-=[]{}|;:,.<>/?"my_list = [random.choice(symbols) for _ in range(length)]result = ''.join(my_list)return result# 客户端代码
def generate_random_array(factory, length):generator = factory.create_generator()return generator.generate_data(length)factories = [NumberGeneratorFactory(), LetterGeneratorFactory(), SymbolGeneratorFactory(),LetterNumberSymbolGeneratorFactory(),SymbolAGeneratorFactory()]
for factory in factories:random_data = generate_random_array(factory, 10)print(random_data)

8275725222
hvAhepveIn
-;($@\:&|%
#s\^*p9,?#
$>!{^.)-+&

 

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

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

相关文章

索引与书架、新华字典的爱恨情仇

在MySQL的索引世界中&#xff0c;性能优化一直是开发者们关注的焦点。而索引&#xff0c;作为提升查询速度的关键技术之一&#xff0c;是非常重要的。索引根据存储类型可以分为聚簇索引(聚集)与非聚簇索引(非聚集)&#xff0c;它们决定了数据在磁盘上的存储方式和查询时的访问路…

HANA 自动生成年月维度,指定起始即可生成

官方指导文档&#xff1a;SERIES_GENERATE Function (Series Data) | SAP Help Portal select * from SERIES_GENERATE_DATE(INTERVAL 1 MONTH, 2024-01-01, 2024-12-01) 以下示例生成范围从1999-01-01到1999-01-02的一系列时间戳&#xff0c;该时间戳以30秒的间隔递增&#…

重生之 SpringBoot3 入门保姆级学习(24、场景整合 kafka 消息发送服务)

重生之 SpringBoot3 入门保姆级学习&#xff08;24、场景整合 kafka 消息发送服务&#xff09; 6.4 消息发送服务 6.4 消息发送服务 访问 kafka-ui &#xff08;注意这里需要换成你自己的服务器或者虚拟机的 IP 地址&#xff0c;虚拟机可以用局域网 192.168.xxx.xxx 的地址&…

引领未来建筑潮流:轻空间设计团队打造“淄博珍珠”

作为国内单体最大的气膜会展场馆&#xff0c;“淄博珍珠”自四年前启用以来&#xff0c;已成为淄博市的重要地标和经济引擎。该场馆首次亮相于第二十届中国&#xff08;淄博&#xff09;国际陶瓷博览会&#xff0c;凭借其独特的设计和先进的建筑理念&#xff0c;吸引了社会各界…

机器人、人工智能相关领域 news/events (专栏目录)

Some Insights 一些机器人、人工智能或相关领域的news、events等 专栏直达链接 1. 智能制造 - 你需要了解的 10 个基本要素 2. 现实世界中的人工智能&#xff1a;工业制造的 4 个成功案例研究 3. 企业使用人工智能情况调查 4. 未来工厂中的人工智能&#xff1a;人工智能加…

A comprehensive review of machine learning-based models for fake news detection

Abstract 互联网在假新闻传播中的作用使其成为一个严重的问题&#xff0c;需要复杂的技术来自动检测。为了应对 Facebook、Twitter、Instagram 和 WhatsApp 等社交媒体网站上误导性材料的快速传播&#xff0c;本研究探索了深度学习方法和各种分类策略领域。该研究特别调查了基…

Linux安装kvm虚拟机

kvm是基于内核的虚拟机&#xff0c;为什么要用kvm不用vmware、virtual box… 只有一个原因&#xff0c;它非常快&#xff01;本机使用linux开发也是因为它快&#xff01;linux在老电脑上都能流畅运行&#xff0c;更别说现代电脑&#xff0c;如果你觉得装Linux并没有比win快多少…

meson构建入门

Meson 是一个现代的开源构建系统&#xff0c;旨在提高编译速度和使得构建配置文件更易读&#xff0c;类似的构建系统有 Makefile、CMake、automake …。 Meson 是一个由 Python 实现的开源项目&#xff0c;其思想是&#xff0c;开发人员花费在构建调试上的每一秒都是浪费&#…

一文带你搞定Linux开发环境配置

Linux开发必备 万事先更新 sudo apt update && sudo apt upgrade安装gcc工具链 sudo apt install build-essential像mysql、nacos等等建议装docker里&#xff0c;数据挂载到宿主机&#xff0c;日志别挂&#xff0c;直接装本机哪天日志塞满了就要开始重装系统了 以下…

SpringCloud Alibaba Sentinel基础入门与安装

GitHub地址&#xff1a;https://github.com/alibaba/Sentinel 中文文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html 下载地址&#xff1a;https://github.com/alibaba/Sentinel/releases Spring Cloud Alibaba 官方说明文档&#xff1a;Spring Clou…

基于SSM的美食推荐系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的美食推荐系统,java项目。 ecli…

Bitwise 首席投资官:最大的 Alpha 将是华盛顿对加密货币态度的变化

原文标题&#xff1a;​ 《Washington Awakens: This Is What Alpha Looks Like》 撰文&#xff1a;Matt Hougan&#xff0c;Bitwise 首席投资官 编译&#xff1a;Chris&#xff0c;Techub News 更多相关内容点击查看香港Web3媒体TechubNews 在加密货币的泡沫之外&#xff…

商淘云:服装实体店引流会员营销方案

服装零售实体店面临着越来越大的挑战&#xff0c;尤其是在吸引和保持忠诚顾客方面。为了应对这一挑战&#xff0c;制定一套有效的引流会员营销方案显得尤为重要。商淘云将探讨如何通过创新的营销策略和增强的顾客体验&#xff0c;提升实体店的会员数量和销售业绩&#xff0c;从…

浪潮信息内存故障预警技术再升级 服务器稳定性再获提升

浪潮信息近日对其内存故障智能预警修复技术进行了全面升级&#xff0c;再次取得技术突破。此次升级后&#xff0c;公司服务器的宕机率实现了80%锐降&#xff0c;再次彰显了浪潮信息在服务器技术领域的卓越能力。 浪潮信息全新升级服务器内存故障智能预警修复技术MUPR (Memory …

洛谷:P5707【深基2.例12】上学迟到

1. 题目链接 https://www.luogu.com.cn/problem/P5707 【深基2.例12】上学迟到 2. 题目描述 学校和y的家距离s米&#xff0c;s以v的速度去学校&#xff0c;8点之前到&#xff0c;y出门前要打扫10分钟卫生&#xff0c;求s最晚的出门时间 输入&#xff1a;两个正整数路程s&…

2024年6月15日 (周六) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 中医自学宝典: 集合了中医医案&#xff0c;医经&#xff0c;方剂 药材知识的app&#xff0c;更方便的免费学习中医知识 《赛博朋克2077》被取消DLC泄露&…

告别盲目决策!精益生产KPI指标管理系统让你的企业更聪明

在当今快速变化的商业环境中&#xff0c;企业为了保持竞争力&#xff0c;需要高效地追踪、分析和优化各种业务指标。为了实现这一目标&#xff0c;越来越多的企业开始引入指标管理系统&#xff0c;这一工具在提升管理效率和促进业务增长方面发挥着至关重要的作用。 一、什么是…

Neo4j 创建关系

Neo4j 创建关系 在 Noe4j 中&#xff0c;关系是我们用来连接图的两个节点的元素。 这些关系具有数据的方向、类型和形式模式。 本章教你如何 建立关系在现有节点之间创建关系使用标签和属性创建关系 建立关系 我们可以使用 CREATE 子句创建关系。 我们将在方括号[]中指定关系…

代理模式(静态代理/动态代理)

代理模式&#xff08;Proxy Pattern&#xff09; 一 定义 为其他对象提供一种代理&#xff0c;以控制对这个对象的访问。 代理对象在客户端和目标对象之间起到了中介作用&#xff0c;起到保护或增强目标对象的作用。 属于结构型设计模式。 代理模式分为静态代理和动态代理。…

中国首例!「DataKit」上架亚马逊云科技 Marketplace add-ons

在 2022 年的 re:Invent 大会上&#xff0c;亚马逊云科技宣布了一项重大更新&#xff1a;亚马逊云科技 Marketplace 为 Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;提供了附加组件的支持。这一创新功能极大地丰富了 EKS 的生态系统&#xff0c;使用户…