设计模式之工厂模式(python3)

本文介绍了面向对象编程中的三种工厂设计模式——简单工厂模式,通过单一类创建对象;工厂方法模式,将实例化推迟到子类;抽象工厂模式,用于创建一组相关或相互依赖的对象。
摘要由CSDN通过智能技术生成

一、简单工厂模式

什么是简单工厂模式?

        专门定义一个类来负责创建其他类的实例,根据参数的不同创建不同类的实例,被创建的实例通常具有共同的父类,这个模式叫简单工厂模式(Simple Factory Pattern)。

"""
简单工厂模式
"""

from abc import ABCMeta, abstractmethod


class My_abc(metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass


class My_class1(My_abc):
    def test(self):
        return "My_class1_test"


class My_class2(My_abc):
    def test(self):
        return "My_class2_test"


class fac:
    @staticmethod
    def fac_func(param):
        if param == "1":
            return My_class1()
        elif param == "2":
            return My_class2()
        else:
            raise "参数错误"


if __name__ == "__main__":
    a1 = fac.fac_func("1")
    a2 = fac.fac_func("2")
    print(a1.test())
    print(a2.test())


二、工厂方法模式

        由于简单工厂模式不符合"开闭原则",所以在简单工厂模式之上升级出了工厂方法模式。

什么是工厂方法模式?

        定义一个创建对象(实例化对象)的接口,让子类来决定创建哪个类的实例。工厂方法使一个类的实例化延迟到其子类。

"""
工厂方法模式
"""
from abc import ABCMeta, abstractmethod


class EleCar(metaclass=ABCMeta):
    """
    新能源车产品的基类
    """
    @abstractmethod
    def run(self, money):
        pass


class MiCar(EleCar):
    """
    具体的产品
    """
    def run(self):
        print("小米,启动!")


class TslCar(EleCar):
    """
    具体的产品
    """
    def run(self):
        print("特斯拉,启动!")


class CreateCar(metaclass=ABCMeta):
    """
    抽象出来的工厂基类
    """
    @abstractmethod
    def create(self):
        pass


class MiFactory(CreateCar):
    """
    负责创建具体产品的工厂子类
    """
    def create(self):
        return MiCar()


class TslFactory(CreateCar):
    """
    负责创建具体产品的工厂子类
    """
    def create(self):
        return TslCar()


pf = MiFactory()
p = pf.create()
p.run()

三、抽象工厂模式

不太懂!

from abc import ABCMeta, abstractmethod


# 手机壳
class Shell(metaclass=ABCMeta):
    @abstractmethod
    def select_shell(self):
        pass


# CPU处理器
class CPU(metaclass=ABCMeta):
    @abstractmethod
    def select_cpu(self):
        pass


# OS系统
class OS(metaclass=ABCMeta):
    @abstractmethod
    def select_os(self):
        pass


class MiShell(Shell):
    def select_shell(self):
        print("小米手机壳")


class IPhoneShell(Shell):
    def select_shell(self):
        print("苹果手机壳")


class MiCPU(CPU):
    def select_cpu(self):
        print("小米CPU")


class IPhoneCPU(CPU):
    def select_cpu(self):
        print("苹果CPU")


class MiOS(OS):
    def select_os(self):
        print("小米系统")


class IPhoneOS(OS):
    def select_os(self):
        print("苹果系统")


class CreatePhone(metaclass=ABCMeta):
    @abstractmethod
    def make_shell(self):
        pass

    @abstractmethod
    def make_cpu(self):
        pass

    @abstractmethod
    def make_os(self):
        pass


class CreateMi(CreatePhone):
    def make_shell(self):
        return MiShell()

    def make_cpu(self):
        return MiCPU()

    def make_os(self):
        return MiOS()


class CreateIPhone(CreatePhone):
    def make_shell(self):
        return IPhoneShell()

    def make_cpu(self):
        return IPhoneCPU()

    def make_os(self):
        return IPhoneOS()


class Phone:
    def __init__(self, shell, cpu, os):
        self.shell = shell
        self.cpu = cpu
        self.os = os

    def show_info(self):
        print("手机信息:")
        self.shell.select_shell()
        self.cpu.select_cpu()
        self.os.select_os()


def make_phone(factory):
    shell = factory.make_shell()
    cpu = factory.make_cpu()
    os = factory.make_os()
    return Phone(shell, cpu, os)


phone_type = CreateMi()
phone = make_phone(phone_type)
phone.show_info()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值