做视频网站赚钱吗长沙免费建站网络营销
2025/12/31 12:28:58 网站建设 项目流程
做视频网站赚钱吗,长沙免费建站网络营销,蜂蜜网络营销推广方案,国家高新技术企业有效期几年Python 中的工厂模式#xff08;Factory Patterns#xff09; 工厂模式是一类创建型设计模式#xff0c;主要解决对象创建的问题#xff0c;让对象的创建与使用分离#xff0c;提高代码的灵活性和可扩展性。 在 GoF 的 23 种设计模式中#xff0c;与“工厂”相关的有两…Python 中的工厂模式Factory Patterns工厂模式是一类创建型设计模式主要解决对象创建的问题让对象的创建与使用分离提高代码的灵活性和可扩展性。在 GoF 的 23 种设计模式中与“工厂”相关的有两种工厂方法模式Factory Method抽象工厂模式Abstract Factory此外还有一种常见的简化版简单工厂Simple Factory严格来说不属于 GoF 23 种但非常实用。下面用 Python 详细讲解这三种工厂模式。1. 简单工厂Simple Factory最简单的一种不属于 GoF 标准模式但实际项目中使用最多。场景根据输入类型创建不同类的实例。classDog:defspeak(self):returnWoof!classCat:defspeak(self):returnMeow!classAnimalFactory:staticmethoddefcreate_animal(animal_type:str):ifanimal_typedog:returnDog()elifanimal_typecat:returnCat()else:raiseValueError(fUnknown animal type:{animal_type})# 使用animalAnimalFactory.create_animal(dog)print(animal.speak())# Woof!优点调用者无需知道具体类名缺点每次新增动物类型都需要修改工厂类违反开闭原则2. 工厂方法模式Factory Method定义一个创建对象的接口让子类决定实例化哪个类。核心思想一个工厂类对应一种产品新增产品时新增对应的工厂子类。fromabcimportABC,abstractmethod# 产品接口classAnimal(ABC):abstractmethoddefspeak(self):pass# 具体产品classDog(Animal):defspeak(self):returnWoof!classCat(Animal):defspeak(self):returnMeow!# 工厂接口classAnimalFactory(ABC):abstractmethoddefcreate_animal(self)-Animal:pass# 具体工厂classDogFactory(AnimalFactory):defcreate_animal(self)-Animal:returnDog()classCatFactory(AnimalFactory):defcreate_animal(self)-Animal:returnCat()# 使用客户端代码defclient_code(factory:AnimalFactory):animalfactory.create_animal()print(animal.speak())client_code(DogFactory())# Woof!client_code(CatFactory())# Meow!优点符合开闭原则新增动物只需新增类和工厂类无需修改现有代码解耦客户端只依赖抽象工厂适用场景知道要创建哪一组相关对象但想延迟到子类决定具体类3. 抽象工厂模式Abstract Factory提供一个接口用于创建一系列相关或相互依赖的对象而无需指定它们具体的类。场景需要创建产品族如不同风格的 UI 组件Windows 风格 vs Mac 风格fromabcimportABC,abstractmethod# 抽象产品classButton(ABC):abstractmethoddefrender(self):passclassCheckbox(ABC):abstractmethoddefcheck(self):pass# 具体产品 - Windows 风格classWinButton(Button):defrender(self):returnRender Windows buttonclassWinCheckbox(Checkbox):defcheck(self):returnCheck Windows checkbox# 具体产品 - Mac 风格classMacButton(Button):defrender(self):returnRender Mac buttonclassMacCheckbox(Checkbox):defcheck(self):returnCheck Mac checkbox# 抽象工厂classGUIFactory(ABC):abstractmethoddefcreate_button(self)-Button:passabstractmethoddefcreate_checkbox(self)-Checkbox:pass# 具体工厂classWinFactory(GUIFactory):defcreate_button(self):returnWinButton()defcreate_checkbox(self):returnWinCheckbox()classMacFactory(GUIFactory):defcreate_button(self):returnMacButton()defcreate_checkbox(self):returnMacCheckbox()# 客户端代码defclient_code(factory:GUIFactory):buttonfactory.create_button()checkboxfactory.create_checkbox()print(button.render())print(checkbox.check())# 根据操作系统选择工厂importplatformifplatform.system()Windows:factoryWinFactory()else:factoryMacFactory()client_code(factory)优点保证创建的产品是兼容的同一族缺点新增产品如添加 Slider需要修改所有工厂扩展性差三种工厂模式对比模式复杂度扩展性加新产品扩展性加新产品族典型场景简单工厂低差修改工厂好类型不多、变化不频繁工厂方法中好差每种产品独立经常扩展新类型抽象工厂高差修改所有工厂好需要产品族如主题、风格Python 中的实用建议Python 是动态语言很多时候可以用函数或字典映射代替简单工厂animals{dog:Dog,cat:Cat}animalanimals[animal_type]()对于配置驱动的项目如插件系统工厂方法 注册机制很常见classAnimalRegistry:factories{}classmethoddefregister(cls,name,factory):cls.factories[name]factoryclassmethoddefcreate(cls,name):returncls.factories[name]().create_animal()AnimalRegistry.register(dog,DogFactory)animalAnimalRegistry.create(dog)如果你想看更实际的例子如数据库连接工厂、配置文件解析工厂或者某个模式的变体请告诉我

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询