手机网站与普通网站的区别,如何用wordpress做企业,个人网站主页设计模板,做网站下载那个数据库好工厂模式#xff08;Factory Pattern#xff09;是一种创建型设计模式#xff0c;旨在定义一个用于创建对象的接口#xff0c;但由子类决定实例化哪个类。工厂模式可以帮助我们将对象的创建与其使用分离#xff0c;增强代码的可扩展性和维护性。
工厂模式的分类
简单工厂…工厂模式Factory Pattern是一种创建型设计模式旨在定义一个用于创建对象的接口但由子类决定实例化哪个类。工厂模式可以帮助我们将对象的创建与其使用分离增强代码的可扩展性和维护性。
工厂模式的分类
简单工厂模式Simple Factory Pattern工厂方法模式Factory Method Pattern抽象工厂模式Abstract Factory Pattern
这里先介绍 简单工厂模式和工厂方法模式
1. 简单工厂模式
简单工厂模式是一种创建型设计模式它通过一个单一的工厂类来创建不同类型的对象。这个工厂类通常具有一个静态方法根据输入的参数决定创建哪种对象。
结构
工厂类包含用于创建对象的静态方法。产品接口或抽象类定义了创建对象的基本接口。具体产品类实现产品接口。
实现方式
class Animal:def speak(self):passclass Dog(Animal):def speak(self):return Woof!class Cat(Animal):def speak(self):return Meow!class AnimalFactory:staticmethoddef create_animal(animal_type):if animal_type dog:return Dog()elif animal_type cat:return Cat()else:raise ValueError(Unknown animal type)# 使用示例
animal AnimalFactory.create_animal(dog)
print(animal.speak()) # 输出 Woof!优点
简单易用只需调用工厂方法即可创建对象无需关心具体的实现。集中管理对象创建所有对象的创建逻辑都集中在一个地方方便修改。
缺点
不符合开闭原则如果需要增加新类型需要修改工厂类的代码可能会引入错误。职责过重工厂类随着产品类型的增加变得复杂难以维护。
适用场景
需要创建少量的类且不频繁更改。客户端需要与具体类解耦。 2. 工厂方法模式
工厂方法模式是简单工厂模式的进一步抽象。它定义了一个创建对象的接口但由子类决定实例化的类是哪一个。每个具体子类都有自己的工厂方法来创建对象。
结构
抽象产品定义了产品的接口。具体产品实现产品接口的具体类。抽象工厂声明了一个返回产品对象的工厂方法。具体工厂实现了工厂方法返回具体产品实例。
实现方式
from abc import ABC, abstractmethod# 抽象产品类
class Animal(ABC):abstractmethoddef speak(self):pass# 具体产品类
class Dog(Animal):def speak(self):return Woof!class Cat(Animal):def speak(self):return Meow!# 抽象工厂类
class AnimalFactory(ABC):abstractmethoddef create_animal(self):pass# 具体工厂类
class DogFactory(AnimalFactory):def create_animal(self):return Dog()class CatFactory(AnimalFactory):def create_animal(self):return Cat()# 使用示例
dog_factory DogFactory()
dog dog_factory.create_animal()
print(dog.speak()) # 输出 Woof!cat_factory CatFactory()
cat cat_factory.create_animal()
print(cat.speak()) # 输出 Meow!优点
符合开闭原则可以通过添加新的具体工厂类来扩展代码而无需修改现有工厂类。更灵活每个具体工厂类负责创建特定类型的产品使得扩展更加容易。
缺点
类的数量增加每增加一个产品类型都需要创建新的具体工厂类。增加了复杂性比简单工厂模式更复杂需要更多的类和接口。
适用场景
需要将对象的创建与使用解耦同时需要经常扩展产品类。当系统中存在多种产品类型并且需要根据不同的条件来创建不同的产品实例时。 区别总结
简单工厂模式使用一个工厂类来创建对象容易实现但不符合开闭原则修改时需要调整已有的工厂代码。工厂方法模式使用多个具体工厂类每个工厂类负责创建一个产品符合开闭原则便于扩展但实现较为复杂。
何时选择哪种模式
如果对象创建逻辑简单且变更不频繁可以使用简单工厂模式。如果对象创建逻辑复杂且需要频繁扩展和修改应使用工厂方法模式以增加灵活性和扩展性。