一、简单工厂模式
什么是简单工厂模式?
专门定义一个类来负责创建其他类的实例,根据参数的不同创建不同类的实例,被创建的实例通常具有共同的父类,这个模式叫简单工厂模式(Simple Factory Pattern)。
"""
简单工厂模式
"""from abc import ABCMeta, abstractmethodclass My_abc(metaclass=ABCMeta):@abstractmethoddef test(self):passclass 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:@staticmethoddef 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, abstractmethodclass EleCar(metaclass=ABCMeta):"""新能源车产品的基类"""@abstractmethoddef run(self, money):passclass MiCar(EleCar):"""具体的产品"""def run(self):print("小米,启动!")class TslCar(EleCar):"""具体的产品"""def run(self):print("特斯拉,启动!")class CreateCar(metaclass=ABCMeta):"""抽象出来的工厂基类"""@abstractmethoddef create(self):passclass 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):@abstractmethoddef select_shell(self):pass# CPU处理器
class CPU(metaclass=ABCMeta):@abstractmethoddef select_cpu(self):pass# OS系统
class OS(metaclass=ABCMeta):@abstractmethoddef select_os(self):passclass 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):@abstractmethoddef make_shell(self):pass@abstractmethoddef make_cpu(self):pass@abstractmethoddef make_os(self):passclass 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 = shellself.cpu = cpuself.os = osdef 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()