wordmarker.creatives.factory 源代码

from abc import ABCMeta, abstractmethod
from collections import KeysView


[文档]class AbstractBeanFactory(metaclass=ABCMeta): """ :: BeanFactory的抽象类 """
[文档] @abstractmethod def get_bean_names(self): """ .. note:: 获取工厂中所有bean实例对应的名字 :return: - 所有的bean实例对应的名字 """ pass
[文档] @abstractmethod def get_bean(self, name: str): """ .. note:: 根据bean的名字获取bean实例 :param name: 名字 :return: - bean实例 """ pass
[文档] @abstractmethod def contain_bean(self, name: str): """ .. note:: 判断工厂中是否包含某个bean实例 :param name: 名字 :return: - 包含,返回True - 不包含,返回False """ pass
[文档] @abstractmethod def get_type(self, name: str): """ .. note:: 获取bean实例的类型 :param name: 名字 :return: - 工厂中存在bean实例,返回bean实例的类型 - 不存在,返回 None 对应的类型 NoneType """ pass
[文档]class BeanFactory(AbstractBeanFactory): """ :: AbstractBeanFactory的实现类 """ __factory_bean = None _beans = {}
[文档] def get_bean_names(self) -> KeysView: """ .. note:: 获取工厂中所有bean实例对应的名字 :return: - 所有的bean实例对应的名字 """ return self._beans.keys()
[文档] def get_bean(self, name: str): """ .. note:: 根据bean的名字获取bean实例 :param name: 名字 :return: - bean实例 """ return self._beans.get(name)
[文档] def contain_bean(self, name: str): """ .. note:: 判断工厂中是否包含某个bean实例 :param name: 名字 :return: - 包含,返回True - 不包含,返回False """ return name in self._beans.keys()
[文档] def get_type(self, name: str): """ .. note:: 获取bean实例的类型 :param name: 名字 :return: - 工厂中存在bean实例,返回bean实例的类型 - 不存在,返回 None 对应的类型 NoneType """ if self.contain_bean(name): return type(self._beans.get(name)) else: return type(None)
def __new__(cls, *args, **kwargs): if cls.__factory_bean is None: cls.__factory_bean = object.__new__(cls) return cls.__factory_bean
[文档]class FactoryBean(BeanFactory): """ :: BeanFactory的子类 通过add_bean方法,将bean实例添加到工厂 """ __factory_bean = None def __init__(self): if not self.contain_bean("factory_bean"): # 将自身 factory_bean 添加到工厂 self.add_bean("factory_bean", self) def __new__(cls, *args, **kwargs): if cls.__factory_bean is None: cls.__factory_bean = object.__new__(cls) return cls.__factory_bean
[文档] def add_bean(self, name: str, bean): """ .. note:: 将bean实例添加到工厂 :param name: 名字 :param bean: bean实例 """ self._beans[name] = bean