终于正式开始写设计模式了,希望接下来能够尽量用形象合适的例子讲解自己理解的设计模式。
简述
- 顾名思义,就是根据 人们
(调用者)
的需求 (参数)
,生产对应的产品 (对象)
。
- 弱化了对象间的耦合。
- 减少代码重复代码。
简单工厂模式
就拿 做饭吃
举个例子好了。
- 准备食材
- 根据食材做出相应的饭菜
工厂模式的方式就是不用去关注细节 (做饭过程)
,关注结果就好了,细节在别的部分完成。
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
| var home = { eat: function (material) { var food; switch (material) { case '鸡蛋': food = '鸡蛋炒饭'; break;
case '白菜': food = '白菜炒饭'; break;
case '黄瓜': food = '黄瓜炒饭'; break;
default: food = '剩饭炒饭'; }
return food; } }
var m1 = home.eat('鸡蛋'); var m2 = home.eat('黄瓜'); var m3 = home.eat();
|
这种 简单工厂模式
是挺简单的,但不够灵活,正如例子中,老是自己做饭好累的。:(
复杂工厂模式
所以还可以去饭店、餐厅吃饭。
只要是饭店,都可以 吃饭(通用的方法)
,做饭什么的(不同的方法)
都交给饭店就好了,只管吃。
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 57 58 59 60 61 62 63 64 65
| var Restaurant = { eat: function (material) { var food = this.menu(material); return food; }, menu: function (material) { // 空白的菜单 } }
// 来自 笔记4 的继承方法 function clone (object) { function F() {} F.prototype = object; return new F(); }
// 开张了一家沙县 var shaXian = clone(Restaurant); shaXian.menu = function (material) { var food; switch (material) { case '鸡蛋': food = '鸡蛋蒸饺'; break;
case '白菜': food = '白菜蒸饺'; break;
case '黄瓜': food = '黄瓜蒸饺'; break;
default: food = '蒸饺'; } return food; }
// 开张了一家 清真面馆 var qingZhen = clone(Restaurant); qingZhen.menu = function (material) { var food; switch (material) { case '鸡蛋': food = '鸡蛋面'; break;
case '白菜': food = '白菜面'; break;
case '黄瓜': food = '黄瓜面'; break;
default: food = '面'; } return food; }
var m4 = shaXian.eat('鸡蛋'); // 周四去 沙县 吃鸡蛋蒸饺,不好吃。 var m5 = qingZhen.eat('鸡蛋'); // 周五去 清真面馆 吃鸡蛋面,还可以吧。
|