创建型的模式有五种
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
首先呢,我们把这五个东西理解成五种不同的人,他们要搞事情,比比谁更厉害,比什么呢,他们都是创建型的,那么就比造个屋子吧。
要求是屋子需要可以卖东西和睡觉。
于是乎他们就开始造屋子了。
------- 过了半年 --------
五个人都把屋子造好了,这些聪明的人类分别用自己的方法造出了屋子,我们一起来看看吧。。。
1. 工厂模式
sleeproom = new SleepHouse()
sailroom = new SailHouse()
house = sleeproom + sailroom
工厂模式,认为生产个屋子还不容易嘛,需要什么就去找什么工厂,所以他是这样造的
2. 抽象工厂模式
sleeproom = new House('sleep')
sailroom = new House('sail')
house = sleeproom + sailroom
造屋子,就去屋子工厂,于是他抽象了一下,去了一个多功能工厂
3. 单例模式
house = House.instance() house.add('a beg') house.add('a shop')
单例觉得不对,造个屋子应该是拿一个屋子对象,然后给他加床,然后加个商铺。就可以睡觉和卖东西了。
4. 建造者模式
sailroom = new House.Sailroom() sleeproom = new House.Sleeproom()
house = sailroom + sleeproom
建造者模式,顾名思义啊,建造是一个庞大的工作,一个大的屋子由很多部分组成,然后每个小屋子也是一个类。所以说建造者模式专注于构建的过程
作为一个建造者,我们一个一部分一部分的造,然后搭建这个屋子
5. 原型模式
House.prototype.sleep = sleep
House.prototype.sail = shop
house = new House()
原型模式的方法找了一个可以强大的工厂,工厂需要什么就是找别人取这个技能
聪明的人会发现。其实呢,这些方法都并不是那么好,也没有那么坏,各有利弊,比如(以下纯属个人见解。如果有不好不对的,望指正)
原型模式,让类更加灵活,不同类公用相同的方法,比如jquery就是这样的,应该说js就是这样的,js是用原型模式构建的
建造模式专注建造,让问题别的更加细致,比如antd,threejs都是这么做的,尤其是threejs很专注构建3d应用,看threejs的文档大家会发现three的api都和上边的示例的一样
单例模式,koa,axios, koa-router就是这样的,构建一个实例,然后其他地方公用,当然也可以构建多个,然后分模块,这个也是分模块构建应用的一个很棒的实践
工厂模式,最常见的解决简单问题的方法,简明扼要。
抽象工厂模式,在工厂模式的基础上抽象了一层,在一些情况下可以让代码复用很多。
当然宏观上是这样的,微观上可能各种模式都在同时作用。
举了一些比较宽泛的例子,但是大家不要误解认为这些东西是很高层面的问题,解决小问题依然很有效。需要用哪种模式解决,自行思考。
哒哒,这样就可以理解常见的这些创建型的模式了。
然后我有机会会出结构型模式的7种模式。