23种设计模式介绍(Python示例讲解)(6)
2023-04-30 来源:飞速影视
代码讲解:
在上面的例子中,我们首先定义了一个抽象产品类 Product,它包含了一个抽象方法 use,它将由具体产品类去实现。然后我们定义了两个具体产品类 ConcreteProductA 和 ConcreteProductB,它们实现了 Product 类中定义的抽象方法。接下来,我们定义了一个抽象工厂类 Creator,它包含了一个抽象工厂方法 factory_method,这个方法将由具体工厂类去实现。我们还定义了一个 some_operation 方法,它使用工厂方法创建产品并调用 use 方法。最后,我们定义了两个具体工厂类 ConcreteCreatorA 和 ConcreteCreatorB,它们分别实现了 Creator 类中的 factory_method 方法,返回具体产品类的实例。
在客户端代码中,我们首先创建一个 ConcreteCreatorA 对象,并调用 some_operation 方法,它会使用 ConcreteCreatorA 工厂方法创建一个 ConcreteProductA 对象并调用 use 方法。然后我们创建一个 ConcreteCreatorB 对象,同样调用 some_operation 方法,它会使用 ConcreteCreatorB 工厂方法创建一个 ConcreteProductB 对象并调用 use 方法。
还有就是示例中使用abc抽象基类(抽象父类),Python 中的 abc 模块提供了抽象基类的支持,抽象基类是一种不能直接被实例化的类,它的主要作用是定义接口和规范子类的行为。
在 abc 模块中最常用的类是 ABC 和 abstractmethod。
ABC 是一个抽象基类,它的子类必须实现指定的抽象方法。如果子类没有实现抽象方法,则在实例化子类对象时会抛出 TypeError 异常。abstractmethod 是一个装饰器,它用于指定一个抽象方法。抽象方法是一个没有实现的方法,它只是一个接口,需要由子类去实现。
下面是一个使用 abc 模块定义抽象基类的例子:
from abc import ABC, abstractmethodclass Shape(ABC): @abstractmethod def area(self): passclass Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.heightclass Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2if __name__ == "__main__": # 不能直接实例化Shape() ,报错:
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号