工厂模式是一种常用的设计模式,它可以将具有相同特征和行为的对象进行统一管理和创建,提高代码的可复用性和可维护性。在本文中,将以几个示例为例,从多个角度分析工厂模式的实现和应用。
1. 简单工厂模式示例
简单工厂模式是一种通过一个工厂类根据传入的参数创建不同产品对象的方式。下面是一个简单工厂模式的实现示例:
```python
class Animal:
def __init__(self, name):
self.name = name
def say(self):
pass
class Cat(Animal):
def say(self):
print(f"{self.name}: meow")
class Dog(Animal):
def say(self):
print(f"{self.name}: bark")
class AnimalFactory:
@staticmethod
def create_animal(name, kind):
if kind == "cat":
return Cat(name)
elif kind == "dog":
return Dog(name)
else:
raise ValueError(f"Invalid animal kind: {kind}")
```
在这个示例中,Animal是一个基类,Cat和Dog是其子类。AnimalFactory是工厂类,通过create_animal方法根据传入的kind参数创建不同的动物对象。将来如果需要新增其他种类的动物,只需要新增相应的子类和修改工厂类的代码即可。
2. 工厂方法模式示例
工厂方法模式是一种通过抽象工厂和具体工厂来创建产品对象的方式。下面是一个简单的工厂方法模式实现示例:
```python
from abc import ABC, abstractmethod
class Button(ABC):
@abstractmethod
def click(self):
pass
class WindowsButton(Button):
def click(self):
print("Windows button clicked")
class MacButton(Button):
def click(self):
print("Mac button clicked")
class Dialog(ABC):
@abstractmethod
def create_button(self):
pass
class WindowsDialog(Dialog):
def create_button(self):
return WindowsButton()
class MacDialog(Dialog):
def create_button(self):
return MacButton()
```
在这个示例中,Button是抽象产品,WindowsButton和MacButton是具体产品,Dialog是抽象工厂,WindowsDialog和MacDialog是具体工厂。调用WindowsDialog的create_button方法可以得到一个WindowsButton对象,调用MacDialog的create_button方法可以得到一个MacButton对象。
3. 抽象工厂模式示例
抽象工厂模式是一种通过抽象工厂和抽象产品族来创建产品对象的方式。下面是一个简单的抽象工厂模式实现示例:
```python
from abc import ABC, abstractmethod
class Button(ABC):
@abstractmethod
def click(self):
pass
class TextField(ABC):
@abstractmethod
def write(self, text):
pass
class WindowsButton(Button):
def click(self):
print("Windows button clicked")
class WindowsTextField(TextField):
def write(self, text):
print(f"Type '{text}' into Windows text field")
class MacButton(Button):
def click(self):
print("Mac button clicked")
class MacTextField(TextField):
def write(self, text):
print(f"Type '{text}' into Mac text field")
class UIFactory(ABC):
@abstractmethod
def create_button(self):
pass
@abstractmethod
def create_text_field(self):
pass
class WindowsUIFactory(UIFactory):
def create_button(self):
return WindowsButton()
def create_text_field(self):
return WindowsTextField()
class MacUIFactory(UIFactory):
def create_button(self):
return MacButton()
def create_text_field(self):
return MacTextField()
```
在这个示例中,Button和TextField是抽象产品,WindowsButton、WindowsTextField、MacButton和MacTextField是具体产品,UIFactory是抽象工厂,WindowsUIFactory和MacUIFactory是具体工厂。将来如果需要新增其他的产品族,只需要新增相应的抽象产品和具体产品,以及相应的抽象工厂和具体工厂。
扫码咨询 领取资料