设计模式之工厂方法和抽象工厂
2016-06-23 14:45
309 查看
/**
* Created by zengxianwen on 2016/6/13.
*/
console.log('start');
/***工厂方法模式start***/
/**
* 工厂方法模式
* @param type
* @param content
* @returns {Factory}
* @constructor
*/
var Factory = function (type,content)
{
if(this
instanceof Factory){
var s = new
this[type](content);
return s;
}else{
return new Factory(type,content);
}
};
Factory.prototype =
{
Java:function (content)
{
console.log('Java--' +
content)
},
Javascript:function (content)
{
console.log('JavaScript--' +
content);
},
UI:function (content)
{
console.log('UI--' +
content);
},
Php:function (content)
{
console.log('Php--' +
content)
}
};
//测试
var data =
[{type:'Javascript',content:'JavaScript
is very good'},{type:'Java',content:'Java
is very goog'},{type:'UI',content:'UI
is very good '},{type:'Php',content:'Php
is very good'}];
for(var i = 0 ; i < data.length; i ++){
Factory(data[i].type,data[i].content);
};
/***工厂方法模式end***/
/**抽象工厂方法start**/
/**
* 抽象工厂方法
* @param subType
* @param superType
* @constructor
*/
var VehicleFactory = function (subType,superType)
{
if(typeof VehicleFactory[superType]
=== 'function'){
function F()
{};
F.prototype = new VehicleFactory[superType]();
subType.constructor =
subType;
subType.prototype = new F();
}else{
throw new Error('未创建该抽象类');
}
}
VehicleFactory.Car = function ()
{
this.type = 'car';
};
VehicleFactory.Car.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};
VehicleFactory.Bus = function ()
{
this.type = 'bus';
};
VehicleFactory.Bus.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};
VehicleFactory.Truck = function ()
{
this.type = 'truck';
};
VehicleFactory.Truck.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};
var BMW = function (price,speed)
{
this.price =
price;
this.speed =
speed;
}
VehicleFactory(BMW,'Car');
BMW.prototype.getPrice = function ()
{
return this.price;
};
BMW.prototype.getSpeed = function ()
{
return this.speed;
};
//测试
var bmw = new BMW(1000000,1200);
console.log(bmw.getPrice());
console.log(bmw.getSpeed());
console.log(bmw.type);
/**抽象工厂方法start**/
* Created by zengxianwen on 2016/6/13.
*/
console.log('start');
/***工厂方法模式start***/
/**
* 工厂方法模式
* @param type
* @param content
* @returns {Factory}
* @constructor
*/
var Factory = function (type,content)
{
if(this
instanceof Factory){
var s = new
this[type](content);
return s;
}else{
return new Factory(type,content);
}
};
Factory.prototype =
{
Java:function (content)
{
console.log('Java--' +
content)
},
Javascript:function (content)
{
console.log('JavaScript--' +
content);
},
UI:function (content)
{
console.log('UI--' +
content);
},
Php:function (content)
{
console.log('Php--' +
content)
}
};
//测试
var data =
[{type:'Javascript',content:'JavaScript
is very good'},{type:'Java',content:'Java
is very goog'},{type:'UI',content:'UI
is very good '},{type:'Php',content:'Php
is very good'}];
for(var i = 0 ; i < data.length; i ++){
Factory(data[i].type,data[i].content);
};
/***工厂方法模式end***/
/**抽象工厂方法start**/
/**
* 抽象工厂方法
* @param subType
* @param superType
* @constructor
*/
var VehicleFactory = function (subType,superType)
{
if(typeof VehicleFactory[superType]
=== 'function'){
function F()
{};
F.prototype = new VehicleFactory[superType]();
subType.constructor =
subType;
subType.prototype = new F();
}else{
throw new Error('未创建该抽象类');
}
}
VehicleFactory.Car = function ()
{
this.type = 'car';
};
VehicleFactory.Car.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};
VehicleFactory.Bus = function ()
{
this.type = 'bus';
};
VehicleFactory.Bus.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};
VehicleFactory.Truck = function ()
{
this.type = 'truck';
};
VehicleFactory.Truck.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};
var BMW = function (price,speed)
{
this.price =
price;
this.speed =
speed;
}
VehicleFactory(BMW,'Car');
BMW.prototype.getPrice = function ()
{
return this.price;
};
BMW.prototype.getSpeed = function ()
{
return this.speed;
};
//测试
var bmw = new BMW(1000000,1200);
console.log(bmw.getPrice());
console.log(bmw.getSpeed());
console.log(bmw.type);
/**抽象工厂方法start**/
相关文章推荐
- 关于Gson 解析出问题
- GreenDao数据库的使用
- mysql安装后优化
- javascript 面向对象特性之继承
- jdk环境变量
- HTML5移动端图片上传模块
- 微信web开发者工具
- git-flow学习
- luarocks学习
- JavaScript对象操作之浅复制
- python day02字典的神奇
- JavaScript对象表示方式
- CentOS 下apache开启.htaccess 功能教程
- [转]mysql 5.6 存储过程+事务+游标+错误异常抛出+日志写入
- 项目中遇到的兼容性问题
- 使用数据泵导入导出oracle数据库
- 移动零 Move Zeroes
- bate阶段项目总结
- 网页微信授权
- 上线被拒的原因