徐州市建设监理协会网站,把网站放到服务器上,广州网站优化排名系统,企业品牌类网站有哪些设计模式选择理由#xff1a; 抽象工厂模式#xff1a; 抽象工厂模式适合于创建一组相关或依赖对象的场景。在这里#xff0c;我们可以定义一个抽象工厂来创建不同类型#xff08;数字、字母、特殊符号#xff09;的随机数据生成器。 策略模式#xff1a; 策略模式允许你…设计模式选择理由 抽象工厂模式 抽象工厂模式适合于创建一组相关或依赖对象的场景。在这里我们可以定义一个抽象工厂来创建不同类型数字、字母、特殊符号的随机数据生成器。 策略模式 策略模式允许你定义一系列算法并将每个算法封装起来使它们可以互相替换。在这里我们可以使用策略模式来定义不同类型数据的生成算法例如数字生成策略、字母生成策略、特殊符号生成策略。
示例实现
下面是一个简单的Python示例结合抽象工厂模式和策略模式用于生成随机数 import random
import string
from abc import ABC, abstractmethod
import numpy as np
import random# 抽象工厂数据生成器工厂
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)class RandomStrategy(ABC):# 抽象类强制子类实现此方法abstractmethoddef fun_random(self, seedNone):passclass PortRandomStrategy(RandomStrategy):def fun_random(self, seedNone):random.seed(seed)port random.randint(0, 65535)return portclass IPRandomStrategy(RandomStrategy):def fun_random(self, seedNone):random.seed(seed)ip ..join(str(random.randint(0, 255)) for _ in range(4))return ipclass SeqRandomStrategy(RandomStrategy):def fun_random(self, seedNone):random.seed(seed)seqRand random.randint(0, (2**32) - 1)return seqRandfactories [NumberGeneratorFactory(), LetterGeneratorFactory(), SymbolGeneratorFactory(),LetterNumberSymbolGeneratorFactory(),SymbolAGeneratorFactory()]
for factory in factories:random_data generate_random_array(factory, 10)print(random_data)portRandom PortRandomStrategy().fun_random()
portRandomSeed PortRandomStrategy().fun_random(3)
ipRandom IPRandomStrategy().fun_random()
ipRandomSeed IPRandomStrategy().fun_random(3)
seqRandom SeqRandomStrategy().fun_random()
seqRandomSeed SeqRandomStrategy().fun_random(3)print(portRandom,portRandomSeed)
print(ipRandom, ipRandomSeed)
print(seqRandom, seqRandomSeed) 1373322424 LgVdMdRGjV \~_-/}$ XH.Q%L\4t ^;)!..-] 59444 31190 172.42.130.11 121.66.189.242 4152488277 2337446730 抽象工厂和具体工厂DataGeneratorFactory是抽象工厂定义了创建数据生成器的接口。 抽象产品和具体产品DataGenerator是抽象产品接口定义了生成数据的方法实现了具体的生成算法。 客户端代码generate_random_array函数接受一个工厂对象和长度作为参数通过工厂创建对应类型的数据生成器并生成随机数组。
此设计可以扩展和修改不同类型数据的生成方式保持代码结构清晰和可维护性高。
使用抽象工厂和策略模式的组合使代码符合开闭原则即对扩展开放、对修改关闭。