From a627bf2c7735f80f5e8612eb5f1d71d4871918ca Mon Sep 17 00:00:00 2001 From: slgxmh Date: Wed, 23 Jun 2021 17:03:50 +0800 Subject: [PATCH 1/2] add factory --- .gitignore | 1 + js/creational/factor.js | 29 +++++++++++++++++++++++++++++ python/creational/factor.py | 27 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 .gitignore create mode 100644 js/creational/factor.js create mode 100644 python/creational/factor.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..600d2d3 --- /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 0000000..762e069 --- /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/factor.py b/python/creational/factor.py new file mode 100644 index 0000000..b55f366 --- /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()) -- Gitee From 59df74e2601ddf81029194ab63889d44594c75f5 Mon Sep 17 00:00:00 2001 From: slgxmh Date: Wed, 23 Jun 2021 17:21:46 +0800 Subject: [PATCH 2/2] add python_abstract_factroy --- python/creational/abstract_factor.py | 92 ++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 python/creational/abstract_factor.py diff --git a/python/creational/abstract_factor.py b/python/creational/abstract_factor.py new file mode 100644 index 0000000..8cae887 --- /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! -- Gitee