设计模式python版(4)-抽象工厂模式

本文深入探讨了抽象工厂模式,这是一种用于创建相关或相互依赖对象的工厂模式。通过一个实例展示了如何在Python中实现抽象工厂模式,以创建不同角色(如学生、老师和工人)的专属卡片、服装和鞋子。该模式有助于在复杂的约束关系中保持对象间的正确组合,但可能增加类的数量并限制了新类型产品的支持。
摘要由CSDN通过智能技术生成

Python设计模式(1)设计模式简介与分类

Python设计模式(2)简单工厂模式

Python设计模式(3)工厂方法模式

Python设计模式(4)抽象工厂模式

Python设计模式(5)建造者模式

Python设计模式(6)单例模式

1、抽象工厂模式简介

  • 含义:
    定义一个工厂类接口,让工厂子类创建一系列相关或相互依赖的对象

  • 说明:相对工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品

  • 优点:
    将客户端与类的具体实现向分离,每个工厂创建了一个完整的产品系列,使得3易于交换产品系列

  • 缺点:难以支持新种类(抽象)的产品

2、代码实现

代码实现如下,学校员工有学生、老师,和工人,每个角色又都有卡,服装,鞋子,每个角色的都不一样,因此,这里就使用了抽象工厂模式,学生,老师和工人分别通过抽象类控制约束,即学生的卡片不能生产出老师的卡片,工人的鞋子也不能使用学生的鞋子,阅读下面的代码就会发现,在这种非常复杂的关系场景下,使用抽象工厂还是很方便的控制好约束关系,但是缺点也是显而易见的,类特别多

from abc import ABCMeta,abstractmethod


class Card(metaclass=ABCMeta):
    @abstractmethod
    def show_card(self):
        pass

class Clothes(metaclass=ABCMeta):
    @abstractmethod
    def show_clothes(self):
        pass

class Shoes(metaclass=ABCMeta):
    @abstractmethod
    def show_shoes(self):
        pass

class Person(metaclass=ABCMeta):
    @abstractmethod
    def make_card(self):
        pass
    @abstractmethod
    def make_clothes(self):
        pass
    @abstractmethod
    def make_shoes(self):
        pass


class StudentCard(Card):
    def show_card(self):
        print("学生卡")

class TeacherCard(Card):
    def show_card(self):
        print("教师卡")

class WorkerCard(Card):
    def show_card(self):
        print("工人卡")


class StudentClothes(Clothes):
    def show_clothes(self):
        print("学生服装")


class TeacherClothes(Clothes):
    def show_clothes(self):
        print("教师服装")


class WorkerClothes(Clothes):
    def show_clothes(self):
        print("工人服装")


class StudentShoes(Shoes):
    def show_shoes(self):
        print("学生鞋子")


class TeacherShoes(Shoes):
    def show_shoes(self):
        print("教师鞋子")


class WorkerShoes(Shoes):
    def show_shoes(self):
        print("工人鞋子")



class TeacherFactory(Person):
    def make_card(self):
        return TeacherCard()
    def make_clothes(self):
        return TeacherClothes()
    def make_shoes(self):
        return TeacherShoes()


class StudentFactory(Person):
    def make_card(self):
        return StudentCard()
    def make_clothes(self):
        return StudentClothes()
    def make_shoes(self):
        return StudentShoes()


class WorkerFactory(Person):
    def make_card(self):
        return WorkerCard()
    def make_clothes(self):
        return WorkerClothes()
    def make_shoes(self):
        return WorkerShoes()

class Member(object):
    def __init__(self,card,clothes,shoes):
        self.card=card
        self.clothes=clothes
        self.shoes=shoes

    def show_info(self):
        print("学校成员信息:")
        self.card.show_card()
        self.clothes.show_clothes()
        self.shoes.show_shoes()

def make_member(factory):
    card=factory.make_card()
    clothes=factory.make_clothes()
    shoes=factory.make_shoes()
    return Member(card,clothes,shoes)

执行结果如下:

学校成员信息:
学生卡
学生服装
学生鞋子
···
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值