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

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)

执行结果如下:

学校成员信息:
学生卡
学生服装
学生鞋子
···

你可能感兴趣的:(设计模式,设计模式,python)