漫谈设计模式(二)---- 创建型模式

创建型的模式有五种

  • 工厂模式(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种模式。

 

posted @ 2018-08-20 18:24  白与小寒  阅读(139)  评论(0编辑  收藏  举报