JavaScript 23 种设计模式之 4 抽象工厂模式

  • 概念与特点
  • 结构与实现
  • 应用场景
  • 应用实例
  • 总结

概念与特点

概念:
提供一组相关或相互依赖对象的接口。抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一类产品。而抽象工厂模式可生产多种类型的产品。

特点:

  1. 系统中有多个产品族。每个具体工厂创建不同类型的同一族产品。
  2. 在内部对相关联的多等级产品公共管理。不必专门引入多个新的类来进行管理。
  3. 当产品族中需要增加一种类型的新产品时,所有的工厂类都需要进行修改。

结构与实现

抽象工厂方法模式包含抽象工厂,具体工厂,抽象产品,具体产品 。抽象工厂可以有多个方法,并且有多个具体工厂去实现。相对应的也会有多个抽象产品,具体产品。
抽象工厂:定义方法。
具体工厂:实现方法。
抽象产品:定义产品的访问方法。
具体产品:实现产品的访问方法。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<script>//抽象工厂function AbstractFactory() {}AbstractFactory.prototype.newAnimal = function () {throw "创建动物";}AbstractFactory.prototype.newPlant = function () {throw "创建植物";}//具体工厂-农场Afunction AFactory() {}AFactory.prototype = new AbstractFactory();//养牛AFactory.prototype.newAnimal = function (){return new niuProduct();};//种菜AFactory.prototype.newPlant = function (){return new greensProduct();};//具体工厂-农场Bfunction BFactory() {}BFactory.prototype = new AbstractFactory();//养马BFactory.prototype.newAnimal = function () {return new horseProduct();};//种水果BFactory.prototype.newPlant = function (){return new fruitsProduct();};//抽象产品1-养动物function AnimateProduct() {}AnimateProduct.prototype.show = function () {}//具体产品-养牛function niuProduct() {}niuProduct.prototype = new AnimateProduct();niuProduct.prototype.show = function () {console.log("养牛")}//具体产品-养马function horseProduct() {}horseProduct.prototype = new AnimateProduct();horseProduct.prototype.show = function () {console.log("养马")}//抽象产品2-种植植物function PlantProduct() {}PlantProduct.prototype.show = function () {}//具体产品-种菜function greensProduct() {}greensProduct.prototype = new PlantProduct();greensProduct.prototype.show = function () {console.log("种菜")}//具体产品-种水果function fruitsProduct() {}fruitsProduct.prototype = new PlantProduct();fruitsProduct.prototype.show = function () {console.log("种水果")}var temp = new AFactory();//养牛temp.newAnimal().show();//种菜temp.newPlant().show();var temp1 = new BFactory();//养马temp.newAnimal().show();//种水果temp.newPlant().show();
</script>
</body>
</html>

应用场景

  1. 当要创建的对象是一系列相关联的产品族。
  2. 系统中有多个产品族。但每次只用其中的某一族产品。

应用实例

暂无。

总结

抽象工厂模式与工厂方法模式就在于是单一产品还是多种类产品。比如 4S 店只销售某一品牌的汽车,但是车行属于综合体,会销售不同类型的汽车。再比如李宁专卖店就只卖李宁的服饰。但是服装商场会销售不同品牌的服饰。

JavaScript 23 种设计模式之 4 抽象工厂模式相关推荐

  1. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式

    系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...

  2. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  3. 【23种设计模式专题】二 工厂模式

    程序猿学社的GitHub,欢迎Star github技术专题 本文已记录到github 文章目录 前言 小故事 传统方式 简单工厂(第一种) 工厂方法模式(第二种) 抽象工厂模式(第三种) 使用工厂方 ...

  4. 23种设计模式(2)-工厂模式

    定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达 ...

  5. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  6. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  7. C++23种设计模式(1)-工厂方法模式

    C++常用的设计模式有23种. 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享 ...

  8. javascript 23 种设计模式

    前言 总体来说设计模式分为三大类: 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为 ...

  9. 23种设计模式学习记录之代理模式

    想说的话: 在大学的时候曾经学过这23种设计模式,但是那时没啥编程经验,糊里糊涂过了一遍,没多久就忘记了,工作之后将精力主要集中在学习新技术上,比如springboot,cloud,docker,vu ...

最新文章

  1. 【 MATLAB 】nextpow2 函数用法之 Optimize FFT with Padding
  2. Linux的shell编写
  3. 前端学习(1264):fetch响应结果
  4. java标识符写法_标识符你书写规范了吗?
  5. redis缓存和mysql数据库同步
  6. 计算机基础知识复习(一)
  7. 河钢唐钢微尔云计算中心对外签订首个合同
  8. matlab课表编排程序实例,编排课程表的一点心得
  9. Android系统启动流程之-----activity启动流程
  10. Android案例手册 - 实现一个华容道拼图游戏
  11. 矩阵的行列式的计算-余子式
  12. onenote标注pdf笔记_如何利用OneNote高效做笔记
  13. 数据化运营chapter3_code--数据处理
  14. 《使命召唤》单机版详尽攻略
  15. 施工部署主要不包括_施工管理目标是单位工程施工部署的重要内容,其目标不包括()。A.质量目标B.社会行为目标C.工期目标...
  16. Qt的内存释放策略(内存自动释放机制)
  17. 知乎高赞:假如我有500w存进余额宝,可以每天坐着等吃吗?
  18. 视频时长不够怎么延长
  19. 【算法 | 实验8】分配最小页数(数组划分和最大值最小化问题)
  20. forest无法扫描指定包接口问题解决

热门文章

  1. 时间复杂度和空间复杂度计算
  2. 【Hexo博客搭建】将其部署到GitHub Pages(三):怎么写作以及更新?
  3. WebApp打开服务器端pdf文件
  4. 借款利息过高,偿还了一部分,如何认定本息问题
  5. unity2018接入高通AR识别图片
  6. 智能卡公共汽车收费系统
  7. android 录像
  8. 批量测试DNS访问速度的脚本
  9. python棋盘覆盖问题,python实现棋盘覆盖问题及可视化
  10. Mapstruct使用说明(一)