diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..600d2d33badf45cc068e01d2e3c837e11c417bc4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode \ No newline at end of file diff --git a/js/creational/factor.js b/js/creational/factor.js new file mode 100644 index 0000000000000000000000000000000000000000..762e069d3ae1023b0eb9112cf92cdb9c98a2d0cc --- /dev/null +++ b/js/creational/factor.js @@ -0,0 +1,29 @@ +class TextLoader { + get data() { + return "This is a text!" + } +} + +class ImageLoader { + get data() { + return "This is a image!" + } +} + +class DataLoaderFactory { + loaders = { + "Image": ImageLoader, + "Text": TextLoader, + } + // 工厂方法 + get_loader(type) { + return new this.loaders[type]() + } +} + +// 创建数据加载器工厂 +factory = new DataLoaderFactory(); +image = factory.get_loader("Image").data +text = factory.get_loader("Text").data +// 输出加载的数据 +console.log(image, text) diff --git a/python/creational/abstract_factor.py b/python/creational/abstract_factor.py new file mode 100644 index 0000000000000000000000000000000000000000..8cae887e9486a0d6a3ea32fd6e88048007c27f9b --- /dev/null +++ b/python/creational/abstract_factor.py @@ -0,0 +1,92 @@ +from typing import NoReturn, Type + + +class DataSet(object): + """ + 数据类的父类,抽象出这一类的最基本的要素与功能 + + 属性: + name: 所有的数据都有一个可读的名字,本例抽象出这一个属性做演示 + """ + + def __init__(self, name: str) -> None: + self.name = name + + def content(self) -> NoReturn: + """数据集的内容""" + raise NotImplementedError + + def __str__(self) -> str: + raise NotImplementedError + + +class Image(DataSet): + """继承自Data父类,假设这是一组图片数据""" + + def content(self) -> NoReturn: + """ + 重载 + 图片数据集的内容 + + 返回:假设返回了一组图片 + """ + print("Image!") + + def __str__(self) -> str: + return f"Image<{self.name}>" + + +class Text(DataSet): + """同样继承自Data父类,假设这一组文字数据集""" + + def content(self) -> NoReturn: + """ + 重载 + 文字数据集的内容 + + 返回:假设返回了一组字符 + """ + print("Text!") + + def __str__(self) -> str: + return f"Text<{self.name}>" + + +class AbstractDataFactory(object): + """抽象工厂的实现""" + + def __init__(self, data_type: Type[DataSet]) -> None: + """设置工厂的类型 + + 参数: + data_type: 数据集的类型 + """ + + self.data_factory = data_type + + def get_data_set(self, name: str) -> DataSet: + """获得不同类型的数据 + + 参数: + name: 数据集的名字 + """ + + data_set = self.data_factory(name) + print(f"Here is your dataset: {data_set}") + return data_set + + +# 抽象工厂的核心思想:声明不同类型的工厂,生产出不同的类 +if __name__ == "__main__": + # 声明了一个文字类的数据集工厂 + factory = AbstractDataFactory(Text) + # 给这个数据集起名 NLP + data_set = factory.get_data_set("NLP") + # 查看 NLP 数据集的内容 + data_set.content() # Here is your data Text Text! + # factor 变成了图像类的数据集工厂 + factory = AbstractDataFactory(Image) + # 起名 CV 数据集 + data_set = factory.get_data_set("CV") + # 查看 CV 数据集的内容 + data_set.content() # Here is your data Image Image! diff --git a/python/creational/factor.py b/python/creational/factor.py new file mode 100644 index 0000000000000000000000000000000000000000..b55f366d0a4b96c89adaa946ecbe39b08e3ecde9 --- /dev/null +++ b/python/creational/factor.py @@ -0,0 +1,27 @@ +class TextLoader: + def get_data(self) -> str: + return "This is a text!" + + +class ImageLoader: + def get_data(self) -> str: + return "This is a image!" + + +class DataLoaderFactory: + def get_loader(self, type: str = "Image") -> object: + """工厂方法""" + loaders = { + "Image": ImageLoader, + "Text": TextLoader, + } + return loaders[type]() + + +if __name__ == "__main__": + # 创建数据加载器工厂 + factory = DataLoaderFactory() + image, text = factory.get_loader( + type="Image"), factory.get_loader(type="Text") + # 输出加载的数据 + print(image.get_data(), text.get_data())