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 閱讀(244) 評論(0)  編輯  收藏 所屬分類: 網頁web前端技術
          主站蜘蛛池模板: 林西县| 神池县| 佛学| 盐津县| 德清县| 永兴县| 台南县| 金阳县| 抚远县| 清远市| 宜良县| 长武县| 西乡县| 清镇市| 贵阳市| 若尔盖县| 喜德县| 龙南县| 密山市| 阿拉善右旗| 文登市| 锦州市| 西乌| 沐川县| 浦城县| 榆中县| 静安区| 康马县| 遂昌县| 察隅县| 孝义市| 湘潭市| 花莲市| 梨树县| 博罗县| 锦屏县| 瑞丽市| 台南县| 辛集市| 涿州市| 枞阳县|