{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/factory-pattern/",
  "atlas": "https://www.pystone.net/?node=factory-pattern#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/factory-pattern.md",
  "context": "https://www.pystone.net/notes/factory-pattern.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:factory-pattern",
  "slug": "factory-pattern",
  "title": "工厂模式",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "工厂模式 创建时间：2020/5/19 11:41",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "8edadb4eb7a5401da271315035c327dc2a50c75e7ad5ad3f4aab1e2745e865fc",
  "assets": [
    {
      "reference": "assets/0001 - 工厂模式__QQ截图20200519122846.png",
      "url": "/media/8e351b8bc7602eac5500.png",
      "mediaType": "image/png",
      "contentHash": "8e351b8bc7602eac550089548ebedc385a46453553356ec53f6e461ea7fcd5af",
      "byteLength": 266815,
      "width": 849,
      "height": 514
    }
  ],
  "headings": [
    {
      "depth": 1,
      "text": "工厂模式",
      "anchor": "工厂模式",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F"
    },
    {
      "depth": 2,
      "text": "工厂模式",
      "anchor": "工厂模式-1",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F-1"
    },
    {
      "depth": 2,
      "text": "概念",
      "anchor": "概念",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E6%A6%82%E5%BF%B5"
    },
    {
      "depth": 3,
      "text": "作用：",
      "anchor": "作用",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E4%BD%9C%E7%94%A8"
    },
    {
      "depth": 3,
      "text": "分类",
      "anchor": "分类",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E5%88%86%E7%B1%BB"
    },
    {
      "depth": 3,
      "text": "原则",
      "anchor": "原则",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E5%8E%9F%E5%88%99"
    },
    {
      "depth": 3,
      "text": "核心本质",
      "anchor": "核心本质",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E6%A0%B8%E5%BF%83%E6%9C%AC%E8%B4%A8"
    },
    {
      "depth": 3,
      "text": "对比",
      "anchor": "对比",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E5%AF%B9%E6%AF%94"
    },
    {
      "depth": 2,
      "text": "抽象工厂模式",
      "anchor": "抽象工厂模式",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F"
    },
    {
      "depth": 3,
      "text": "定义",
      "anchor": "定义",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E5%AE%9A%E4%B9%89"
    },
    {
      "depth": 3,
      "text": "适用场景",
      "anchor": "适用场景",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF"
    },
    {
      "depth": 3,
      "text": "相关概念",
      "anchor": "相关概念",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E7%9B%B8%E5%85%B3%E6%A6%82%E5%BF%B5"
    },
    {
      "depth": 3,
      "text": "优点",
      "anchor": "优点",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E4%BC%98%E7%82%B9"
    },
    {
      "depth": 3,
      "text": "缺点",
      "anchor": "缺点",
      "citation": "https://www.pystone.net/notes/factory-pattern/#%E7%BC%BA%E7%82%B9"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:software-engineering-and-quality",
      "title": "软件工程与质量保障",
      "url": "https://www.pystone.net/notes/software-engineering-and-quality/",
      "atlas": "https://www.pystone.net/?node=software-engineering-and-quality#knowledge-atlas",
      "label": "软件工程与质量保障",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "软件体系结构与设计模式中的“工厂模式”导航项",
      "citation": "https://www.pystone.net/notes/software-engineering-and-quality/#%E8%BD%AF%E4%BB%B6%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%E4%B8%8E%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F"
    }
  ],
  "contentMarkdown": "# 工厂模式\n> 创建时间：2020/5/19 11:41\n\n## 工厂模式\n\n## 概念\n\n### 作用：\n\n创建者和调用者分离\n\n### 分类\n\n  * 简单工厂（静态工厂）模式：用来生产同一等级结构中的任意产品（对于增加新的产品，需要修改已有代码)\n\n  * 工厂方法模式：用来生产同一等级结构中的固定产品（支持增加任意产品）\n\n  * 抽象工厂模式： **围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。**\n\n### 原则\n\n  * 开闭原则：一个软件的实体应当对扩展开放，对修改关闭\n\n  * 依赖倒置原则：要针对接口编程，不针对实现编程\n\n  * 迪米特法则(Law of Demeter)：只与你直接的朋友通信，而避免和陌生人通信\n又叫作最少知识原则（Least Knowledge Principle,LKP）：一个类对于其他类知道的越少越好\n\n### 核心本质\n\n  * 实例化对象不使用new，用工厂方法代替\n\n  * 将选择实现类，创建对象统一管理和控制。从而将调用者跟我们的实现类解耦\n\n### 对比\n\n结构复杂度：simple\n代码复杂度：simple\n编程复杂度：simple\n管理上的复杂度：simple\n\n根据设计原则：Factory Method\n根据实际业务：simple\n\n## 抽象工厂模式\n\n### 定义\n\n提供了创建一系列相关或者相互依赖对象的接口，无需指定他们具体的类\n\n![Alt text](assets/0001 - 工厂模式__QQ截图20200519122846.png)\n\n### 适用场景\n\n  * 客户端（应用层）不依赖于产品类实例如何被创建、实现等细节\n\n  * 强调一系列相关的产品对象（属于同一产品族）一起使用创建对象需要大量的重复代码\n\n  * 提供一个产品类的库，所有的产品以同样的接口出现，从而使得客户端不依赖于具体的实现\n\n### 相关概念\n\n产品族\n产品等级\n\n### 优点\n\n  * 具体产品在应用层的代码隔离，无需关心创建细节\n\n  * 将一个系列的产品统一到一起创建\n\n### 缺点\n\n  * 规定了所有可能被创建的产品集合，产品族中扩展新的产品困难\n\n  * 增加了系统的抽象性和理解难度\n"
}
