http://www.aygfsteel.com/ebecket 返還網
          隨筆-140  評論-11  文章-131  trackbacks-0

          javascript 工廠模式

          /* 簡單工廠 */

          /* BicycleShop class */

          var BicycleShop = function() {};
          BicycleShop.prototype = {
              sellBicycle: function(model) {
                  var bicycle;
                 
                  switch(model) {
                      case 'The SpeedSter':
                          bicycle = new SpeedSter();
                       break;
                      case 'The Lowrider':
                          bicycle = new Lowrider();
                       break;
                   case 'The Comfort Cruiser':
                      default:
                          bicycle = new ComfortCruiser();
                  }
                 
                  Interface.ensureImplements(bicycle, Bicycle);
                  bicycle.assemble();
                  bicycle.wash();
                 
                  return bicycle;
              }
          };

          /* The Bicycle interface. */
          var Bicycle = new Interface('Bicycle', ['assemble','wash','ride','repaid']);

          /* Speedster class. */
          var Speedster = function() {//implements Bicycle
              //...
          };

          Speedster.prototype = {
              accemble: function() {
             
              },
              wash: function() {
             
              },
              ride: function() {
             
              },
              repaid: function() {
                 
              }
          };

          var californiaCruisers = new BicycleShop();
          var yourNewBike = californiaCruisers.sellBicyCle('The Speedster');


          /* BicycleFactory namespace. */

          var BicycleFactory ={
              createBicycle: function(model) {
                  var bicycle;
                 
                  switch(model) {
                      case 'The SpeedSter':
                          bicycle = new SpeedSter();
                       break;
                      case 'The Lowrider':
                          bicycle = new Lowrider();
                       break;
                   case 'The Comfort Cruiser':
                      default:
                          bicycle = new ComfortCruiser();
                  }
                  Interface.ensureImplements(bicycle, Bicycle);
                  return bicycle;
              }
          };

          /* BicycleShop class, improved */
          var BicycleShop = function() {};
          BicycleShop.prototype = {
              var bicycle = BicycleFactory.createBicycle(model);
             
              bicycle.assemble();
              bicycle.wash();
             
              return bicycle;
          };


          /* 真正的工廠模式 */

          /* BicycleShop class(abstract). */

          var BicycleShop = function() {};
          BicycleShop.prototype = {
              sellBicycle: function(model) {
                  var bicycle = this.createBicycle(model);
                 
                  bicycle.assemble();
                  bicycle.wash();
                 
                  return bicycle;
              },
              createBicycle: function(model) {
                  throw new Error('Unsupported operation on an abstract class.');
              }
          };


          /* AcmeBicycleShop class. */
          var AcmeBicycleShop = function() {};
          extend(AcmeBicycleShop, BicycleShop);//類式繼承
          AcmeBicycleShop.prototype.createBicycle = function(model) {
              var bicycle;
              switch(model) {
                  case 'The SpeedSter':
                      bicycle = new SpeedSter();
                      break;
                  case 'The Lowrider':
                      bicycle = new Lowrider();
                      break;
                  case 'The Comfort Cruiser':
                  default:
                      bicycle = new ComfortCruiser();
                  }
              }
             
              Interface.ensureImplements(bicycle, Bicycle);
              return bicycle;
          };

           

          posted on 2009-11-04 16:40 becket_zheng 閱讀(243) 評論(0)  編輯  收藏 所屬分類: 網頁web前端技術
          主站蜘蛛池模板: 庆城县| 景泰县| 平塘县| 县级市| 拜泉县| 德兴市| 丹寨县| 成都市| 密山市| 文山县| 同德县| 双桥区| 深圳市| 中西区| 阳曲县| 怀来县| 漾濞| 玉树县| 鹤峰县| 五华县| 武威市| 泾阳县| 玛纳斯县| 玉龙| 论坛| 竹溪县| 贵溪市| 铜山县| 绥中县| 那曲县| 南康市| 张掖市| 杭锦旗| 祁东县| 达尔| 徐汇区| 宁乡县| 宽城| 抚顺县| 万宁市| 什邡市|