2. JavaScript 设计模式(简单工厂,工厂方法,抽象工厂)
来源:互联网 发布:数据仓库与数据库区别 编辑:程序博客网 时间:2024/05/01 10:09
- 简单工厂(simple factory)
简单工厂模式:又叫静态工厂方法,由一个工厂对象觉得创建某一种产品对象类的实例。主要用于创建同一类对象。
简单工厂 uml 图格式如下:
由上面的uml图可知,工厂返回的对象是要继承Product类的,但是由于js定义变量是没有指定数据类型,也没有多态。那怎么怎么保证工厂返回的对象都继承Product呢?我自己想到了一个方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 利用__proto__这个就保证了工厂返回的类都是继承与Pizza(图为Product)类的。
2.工厂方法(factory method)
通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。
工厂方法 uml 图如下:
工厂类代码,这里只有“纽约pizza工厂”其实还可以有“墨西哥pizza工厂”甚至还可以有其他的。不写了,就举个例子吧。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- pizza 类代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
3.抽象工厂模式(abstract factory)
通过对类的工厂抽象使其业务用于对产品类簇的创建。而不是负责创建一类产品的实例。
- 抽象工厂 uml 图如下:
将抽象工厂和工厂方法的 uml 图比较一下,可以发现工厂方法用来生成不同的pizza。而抽象工厂则是生产一个一地方的披萨店的所有产品。举个例子,ProductA是pizza,ProductB是薯条。
- pizza 类代码(和上面的一样,没有区别)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 薯条类代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 商店工厂类(这里除了纽约,还有其他的商店可以继续写,例如墨西哥。。。)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
4.总结(摘自Head First 设计模式):
- 所有的工厂都是用来封装对象的创建。
- 简单工厂,虽然不是真正的设计模式,但仍不失为一个简单的方法,可以将客户程序从具体类解耦。
- 工厂方法使用继承,把对象的创建委托给子类,子类实现工厂来创建对象。
- 抽象工厂使用对象组合,对象的创建被实现在工厂接口所暴露的方法中。
- 所有工厂模式都是通过减少应用程序和具体类之间的依赖促进松耦合。
- 工厂方法允许类将实例化延迟到子类进行。
- 抽象工厂创建相关的对象家族,而不需要依赖他们的具体类。
- 依赖倒置原则,指导我们避免依赖具体类,而要尽量依赖抽象
- 工厂是很有威力的技巧,帮助我们针对抽象编程,而不要针对具体类编程。
注:此文为转载,原创是 http://blog.csdn.net/willson_l/article/details/72769883
阅读全文
0 0
- 2. JavaScript 设计模式(简单工厂,工厂方法,抽象工厂)
- 2. JavaScript 设计模式(简单工厂,工厂方法,抽象工厂)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- [设计模式](二):工厂模式(简单工厂|静态工程、工厂方法|多工厂、抽象工厂)
- 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- 工厂模式(简单工厂+工厂方法+抽象工厂)
- 工厂模式(简单工厂、工厂方法、抽象工厂)
- 工厂模式(简单工厂、工厂方法、抽象工厂)
- 工厂模式详解(简单工厂+工厂方法+抽象工厂)
- 工厂模式详解(简单工厂+工厂方法+抽象工厂)
- Java工厂模式(简单工厂、工厂方法、抽象工厂)
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- 工厂模式(简单工厂+工厂方法+抽象工厂)
- 设计模式--工厂模式(简单工厂、工厂方法、抽象工厂模式)
- 设计模式-工厂方法 简单工厂 抽象工厂 模板方法
- 设计模式之工厂模式(简单工厂,工厂方法,抽象工厂)
- 夏季你必须了解的防晒知识
- 使用代码生成器快速搭建起一个可用的 Dubbo provider 工程
- Annotation注解APT(五):注入框架ButterKnife
- 深度学习——Batch Normalization
- Oracle中Merge into使用
- 2. JavaScript 设计模式(简单工厂,工厂方法,抽象工厂)
- 仿微信摇一摇最简单实现
- git status简介
- 连接orcl报错12154代码错误 tns识别不赖哦
- 用 Matlab GUI搭建一个简单的CBIR图像检索系统(二)
- 在BeagleBone Black 上安装ROS Hydro
- Mysql实现中文汉字转拼音的实现
- 微信小程序——连接webSocket
- iOS系列开发-版本控制工具Git的使用