7.02 - the factory pattern.js
来自「JS设计模式源代码」· JavaScript 代码 · 共 78 行
JS
78 行
/* 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 AcmeSpeedster(); break; case 'The Lowrider': bicycle = new AcmeLowrider(); break; case 'The Flatlander': bicycle = new AcmeFlatlander(); break; case 'The Comfort Cruiser': default: bicycle = new AcmeComfortCruiser(); } Interface.ensureImplements(bicycle, Bicycle); return bicycle; };/* GeneralProductsBicycleShop class. */var GeneralProductsBicycleShop = function() {};extend(GeneralProductsBicycleShop, BicycleShop);GeneralProductsBicycleShop.prototype.createBicycle = function(model) { var bicycle; switch(model) { case 'The Speedster': bicycle = new GeneralProductsSpeedster(); break; case 'The Lowrider': bicycle = new GeneralProductsLowrider(); break; case 'The Flatlander': bicycle = new GeneralProductsFlatlander(); break; case 'The Comfort Cruiser': default: bicycle = new GeneralProductsComfortCruiser(); } Interface.ensureImplements(bicycle, Bicycle); return bicycle;};/* Usage. */var alecsCruisers = new AcmeBicycleShop();var yourNewBike = alecsCruisers.sellBicycle('The Lowrider');var bobsCruisers = new GeneralProductsBicycleShop();var yourSecondNewBike = bobsCruisers.sellBicycle('The Lowrider');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?