软考
APP下载

工厂模式示例

工厂模式是一种常用的设计模式,它可以将具有相同特征和行为的对象进行统一管理和创建,提高代码的可复用性和可维护性。在本文中,将以几个示例为例,从多个角度分析工厂模式的实现和应用。

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是具体工厂。将来如果需要新增其他的产品族,只需要新增相应的抽象产品和具体产品,以及相应的抽象工厂和具体工厂。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库