Python 设计模式之工厂模式

这篇博客介绍了工厂模式在软件开发中的应用,它提供了一种抽象化的接口来创建对象,而非直接指定创建哪种类型。通过工厂类,可以根据输入需求动态地创建如服装、口红、鞋子等不同类型的对象,实现代码的可扩展性和维护性。当需要新增产品类型时,只需添加新的子类即可,无需修改已有代码。示例中展示了如何根据需求文件内容创建相应的产品实例。
摘要由CSDN通过智能技术生成

工厂模式是一个在软件开发中用来创建对象的设计模式。

工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。

为了实现此方法,需要创建一个工厂类并返回所需对象。

当程序运行输入一个“类型”的时候,需要创建于此相应的对象。这就用到了工厂模式。在如此情形中,实现代码基于工厂模式,可以达到可扩展,可维护的代码。当增加一个新的类型,不在需要修改已存在的类,只增加能够产生新类型的子类。

简短的说,当以下情形可以使用工厂模式:

1.不知道用户想要创建什么样的对象

2.当你想要创建一个可扩展的关联在创建类与支持创建对象的类之间。

案例:

"""
工厂模式:
根据需求产生对象。
"""
from typing import Any


class Clothes:
    """服装工厂类"""
    def __init__(self,name):
        self.name = name

    def create(self):
        pass

class Lovely(Clothes):

    def __init__(self, name):
        super().__init__(name)

    def create(self):
        print(f"{self.name} 生产 汉服")

class Cool(Clothes):

    def __init__(self, name):
        super().__init__(name)

    def create(self):
        print(f"{self.name} 生产 酷酷的、帅")

class Lipstick(Clothes):

    def __init__(self, name):
        super().__init__(name)

    def create(self):
        print(f"{self.name} 生产 死亡芭比粉")

class Shoes(Clothes):

    def __init__(self, name):
        super().__init__(name)

    def create(self):
        print(f"{self.name}生产 红色高跟鞋")

class Shoes2(Clothes):
    def __init__(self, name):
        super().__init__(name)

    def create(self):
        print(f"{self.name}生产 蓝色高跟鞋")

class Requirement:
    """定义一个需求类"""
    @staticmethod
    def creatNeed(need):
        if need == "死亡芭比粉":
            return Lipstick("死亡芭比粉")
        elif need == "酷酷的、帅":
            return Cool("酷酷的、帅")
        elif need == "汉服":
            return Lovely("汉服")
        elif need == "红色高跟鞋":
            return Shoes("红色高跟鞋")
        elif need == "蓝色高跟鞋":
            return Shoes2("蓝色高跟鞋")

# Requirement.creatNeed("死亡芭比粉").create()
# Requirement.creatNeed("红色高跟鞋").create()
# Requirement.creatNeed("汉服").create()

with open("create.txt","r",encoding="utf-8")as f_r:
    content = f_r.read()
    # print(content)
Requirement.creatNeed(content).create()

# class StudentNum:
#     num = 0
#
#     @classmethod
#     def add_num(cls):
#         cls.num += 1
#
#     @classmethod
#     def get_num(cls):
#         return cls.num
#
#     def __new__(cls) -> Any:
#         StudentNum.add_num()
#         return super().__new__(cls)
#
#
# class Student(StudentNum):
#     def __init__(self):
#         self.name = ""
# a = Student()
# b = Student()
# c = Student()
# print(StudentNum.get_num())
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值