Python实现简单工厂、工厂方法、抽象工厂设计模式

本文介绍了工厂模式在Python中的应用,包括简单工厂、工厂方法和抽象工厂的设计模式。简单工厂根据参数创建不同对象;工厂方法通过子类决定实例化类型,提高灵活性和代码通用性;抽象工厂则提供创建一系列相关对象的接口,无需指定具体类。文章还讨论了工厂方法的灵活性和松耦合优势,并对比了工厂方法与抽象工厂的差异。
摘要由CSDN通过智能技术生成

概念

在面向对象中,工厂表示一个负责创建其他类型对象的类。
工厂具有:

  • 松耦合
  • 客户端无需了解创建对象的类,但是照样可以使用它来创建对象。
  • 可以轻松的在工厂中添加其他类来创建其他类型的对象。

工厂模式有3种变体:

  • 简单工厂:允许接口创建对象,但不会暴露对象的创建逻辑。
  • 工厂方法:允许接口创建对象,但使用哪个类来创建对象是交给子类决定。
  • 抽象工厂:抽象工厂是一个能够创建一系列相关对象而无需指定其具体类的接口。它可以提供其他工厂的对象,在内部创建其他对象。

实现

简单工厂

  • 工厂根据传入的参数,返回或者创建不同的对象
# ABCMeta是Python的特殊的元类,用来生成抽象类
from abc import ABCMeta, abstractmethod


# 动物类,定义say方法,但不实现
class Animal(metaclass=ABCMeta):
    @abstractmethod
    def say(self):
        pass


# 狗类,继承动物,重写say方法
class Dog(Animal):
    def say(self):
        print('i am dog')


# 猫类,继承动物,重写say方法
class Cat(Animal):
    def say(self):
        print('i am cat')


# 工厂类
class ForestFactory(object):
    # say方法的统一接口,传入子类对象,调用他们的say方法
    def say_something(self, object_type):
        return eval(object_type)().say()


if __name__ == '__main__':
    ff = ForestFactory()
    animal = 'Cat'
    ff.say_something(animal)
    '''结果
    i am cat'''

工厂方法

  • 定义一个接口来创建对象,工厂本身并不创建对象,而交给子类完成,子类决定要实例化哪些类。
  • Factory方法的创建时通过继承而不是通过实例化。
  • 工厂方法更加具有可定制性,它可以返回相同的实例或者子类,而不是某种类型的对象。

假设每个页面都有一块区域显示个人信息,但是内容不同,设计代码如下:

from abc import ABCMeta, abstractmethod

# 一个区表示哪方面内容,抽象的
class Section(metaclass=ABCMeta):
    @abstractmethod
    d
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值