扩展知识
扩展
1.工厂模式
2.约束的第二种方法——定义抽象类
3.简历CMDB总结
工厂模式
-
简单模式
定义:工厂类会提供一个接口,并根据客户端传入参数来创建相应的实例对象。(创建一个对象) 自己了解:只需要改变FlowerSimpleFactory类中的get_flower方法传入的类就可以得到想要的数据,***子类直接就是数据
from abc import ABCMeta, abstractmethod class Flower(metaclass=ABCMeta): @abstractmethod def show_price(self): pass class Rose(Flower): def show_price(self): print('Rose price: $99') class Tulip(Flower): def show_price(self): print('Tulip price: $66') class FlowerSimpleFactory: def get_flower(self, flower_type): return flower_type() if __name__ == '__main__': flower_factory = FlowerSimpleFactory() rose = flower_factory.get_flower('Rose') tulip = flower_factory.get_flower('Tulip') rose.show_price() tulip.show_price()
-
工厂方法模式
定义:需要定义一个基类,不同的子类则代表着不同类型的对象。相对于简单工厂模式而言,工厂方法模式具有更强的可定制性。(创建一个对象) 自己理解:我只需要改变FlowerShop1和FlowerShop2类中的方法中的代码就得到不同的结果,****子类决定自己
from abc import ABCMeta, abstractmethod class Flower(metaclass=ABCMeta): @abstractmethod def show_price(self): pass class Rose(Flower): def show_price(self): print('Rose price: $99') class Tulip(Flower): def show_price(self): print('Tulip price: $66') class Lily(Flower): def show_price(self): print('Lily price: $33') class FlowerShopFactory(metaclass=ABCMeta): def __init__(self): self.flowers = [] self.stock_flowers() @abstractmethod def stock_flowers(self): pass def get_flowers(self): return self.flowers def add_flower(self, flower): self.flowers.append(flower) class FlowerShop1(FlowerShopFactory): def stock_flowers(self): self.add_flower(Rose()) self.add_flower(Tulip()) class FlowerShop2(FlowerShopFactory): def stock_flowers(self): self.add_flower(Rose()) self.add_flower(Tulip()) self.add_flower(Lily()) if __name__ == '__main__': flower_shop1 = FlowerShop1() for flower in flower_shop1.get_flowers(): flower.show_price() flower_shop2 = FlowerShop2() for flower in flower_shop2.get_flowers(): flower.show_price() Rose price: $99 Tulip price: $66 Rose price: $99 Tulip price: $66 Lily price: $33
-
抽象工厂模式
定义:需要定义一个抽象工厂类,然后由不同的子类来创建不同系列的对象,一个系列即代表一组对象。(创建一组对象) 自己理解:随着抽象类定义的方法越多,子类可以继承的功能就可以越多,****父类成就子类
from abc import ABCMeta, abstractmethod class MiniCar(metaclass=ABCMeta): @abstractmethod def show_size(self): pass class SedanCar(metaclass=ABCMeta): @abstractmethod def show_price(self): pass # 国产车 class DomesticMiniCar(MiniCar): def show_size(self): print('Domestic mini car size: 111') class DomesticSedanCar(SedanCar): def show_price(self): print('Domestic sedan car price: 10W') # 英国车 class EnglishMiniCar(MiniCar): def show_size(self): print('English mini car size: 222') class EnglishSedanCar(SedanCar): def show_price(self): print('English sedan car price: 30w') # 抽象工厂类 class CarFactory(metaclass=ABCMeta): @abstractmethod def create_mini_car(self): pass @abstractmethod def create_sedan_car(self): pass # 国产车工厂类 class DomesticCarFactory(CarFactory): def create_mini_car(self): return DomesticMiniCar() def create_sedan_car(self): return DomesticSedanCar() # 英国车 class EnglishCarFactory(CarFactory): def create_mini_car(self): return EnglishMiniCar() def create_sedan_car(self): return EnglishSedanCar()
约束的第二种方法——定义抽象类
import abc # 抽象类 class Base(metaclass=abc.ABCMeta): # 抽象方法 @abc.abstractmethod def process(self): pass class Foo(Base): pass Foo()
简历CMDB总结
-
项目名称
CMDB / 资产管理系统 / 服务器配置管理系统 / 运维自动化平台
-
项目描述
CMDB是一套用于自动化采集服务器资产信息的项目,由于公司对于资产维护成本比较高并且数据准确性越来越低,因为原来都是搭建了samba服务,在内部共享了excel实现。通过cmdb项目可以改善资产采集的功能,减低人员成本提高工作效率,本项目实现主要有 采集中控机/restful api/资产管控平台 实现。5 对于采集中控机可以支持多种模式进行操作,如:saltstack/ansible/paramiko默认,并且开发过程中遵循开放封闭原则并且利用 工厂模式 实现可扩展性的插件。 对于api,是严格是遵循restful规范并使用 django rest framework框架实现,并在内通过反射机制实现资产变更记录以及资产的持久化处理。 资产管控平台主要为运维及主管提供数据支持和部分报表,支持excel批量导入导出,支持利用时间轴清晰的展示服务器生命周期,基于highcharts实现数据报表的展示。
-
技术点(项目功能/我的职责)
-
针对不同公司的业务开发,使用 paramiko/ansible/saltstack 实现远程采集资产的扩展。
-
参考 middleware 实现源码并结合工厂模式,开发出了可插拔式的采集资产插件。
-
考虑到项目的严谨性,对于项目中的插件使用主动抛出异常进行约束。
- 有没有其他的约束? 通过abc实现抽象类和抽象方法实现约束。 - 你为什么不用abc?而用异常? abc 操作起来比较麻烦,也可以实现。 我觉得抛出异常会更加简洁一些,并且我参考了一些源码,他们内部也是通过异常实现。 import abc # 抽象类 class Base(metaclass=abc.ABCMeta): # 抽象方法 @abc.abstractmethod def process(self): pass class Foo(Base): pass Foo()
-
通过定制和扩展drf 内置authentication组件,实现用户认证。
-
在restful api中实现api/版本/认证的功能。
-
支持最服务器资产进行批量的导入导出,内部只用xlrd/xlwt模块进行操作。
-
对于公司的服务器资产进行根据业务线做 数据报表的处理。
-
基于rbac实现权限的信息的校验。
-