#!/usr/bin/env python # -*- coding:utf-8 -*- from BuildSettings import BuildSettingsST import BuilderGnuMake class BuilderManager(object): '''管理所有抽象 Builder''' def __init__(self): self.builders = {} # 保存所有 Builder 实例,{名字: 实例} def AddBuilder(self, builder): self.builders[builder.name] = builder def GetBuilderByName(self, name): return self.builders.get(name) def GetActiveBuilderInstance(self): '''从配置文件中获取''' blder = BuildSettingsST.Get().GetActiveBuilderInstance() if not blder: print "No active Builder" return None # 理论上基类的配置是适用于所有派生类的 return BuilderGnuMake.BuilderGnuMake(blder.ToDict()) class BuilderManagerST: __ins = None @staticmethod def Get(): if not BuilderManagerST.__ins: BuilderManagerST.__ins = BuilderManager() # 注册可用的 Builder 抽象类 # 所有设置是默认值,需要从配置文件读取设置值 BuilderManagerST.__ins.AddBuilder(BuilderGnuMake.BuilderGnuMake()) return BuilderManagerST.__ins @staticmethod def Free(): BuilderManagerST.__ins = None