面向对象设计原则

开放封闭原则:

  一个软件实体如类、模块和函数应该对拓展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

里氏替换原则:

  所有引用的父类的地方必须能透明的使用其子类的对象

依赖倒置原则:

  高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象;即针对接口编程,而不是针对实现编程

工厂方法模式

定义:创建对象的接口(工厂接口),让子类决定实例化哪一个产品类

角色:

  抽象工厂角色(creator)

  具体工厂角色(concrete creator)

  抽象产品角色(product)

  具体产品角色(concrete product)

例子:比如我们有一个染色的机器,我们要给指定的机器生产对应的工艺编程

from abc import ABCMeta, abstractmethod
#抽象产品
class CraftProgramming(metaclass=ABCMeta):
    #abstract class
    @abstractmethod
    def setStep(self,step: list):
        pass
#具体产品
class ModelTypeACraft(CraftProgramming):
    def __init__(self,childModelType=False):
        self.childModelType =childModelType
    def setStep(self,step: list):
        if self.childModelType:
            print(f"A机型-{self.childModelType}工艺工步为{step}")
        else:
            print(f"A机型工艺工步为{step}")

class ModelTypeBCraft(CraftProgramming):
    def setStep(self,step: list):
            print(f"B机型工艺工步为{step}")
#抽象工厂
class CraftProgrammingFactory(metaclass=ABCMeta):
    @abstractmethod
    def creatCraft(self):
        pass
#具体工厂
class ModelTypeACraftFactory(CraftProgrammingFactory):
    def creatCraft(self):
        return ModelTypeACraft()

class ModelTypeBCraftFactory(CraftProgrammingFactory):
    def creatCraft(self):
        return ModelTypeBCraft()

class ModelTypeAChildCraftFactory(CraftProgrammingFactory):
    def creatCraft(self):
        return ModelTypeACraft(childModelType=True)

cf = ModelTypeACraftFactory()
c = cf.creatCraft()
c.setStep([])
07-09 15:29