通过babel+nodejs+es2015学习了『模块化编程』的一个基础。
其实在javascript中也有设计模式。
我们来设计一个订单模块
订单号、下单人ID、订单商品数量、下单时间、子订单对象(一对多):商品ID、商品价格、商品数量
Orders.js
// 主订单
const MainOrder = {
OrderNo:"",
OrderUser:0,
OrderTime:"",
OrderDetail:[]
}
// 子订单
const DetailOrder = {
ProdID:0,
ProdNum:0,
ProdPrice:0.00
}
// 最后导出这2个对象
export {MainOrder,DetailOrder}
如果我们要在入口文件index.js里使用上面定义的Orders模块:
import {MainOrder,DetailOrder} from "./Orders"
我们今天并不打算这样写,我们希望能在我们的业务模块中适当的加入一些设计模式,方便后面的扩展。
简单工厂模式
我们换一种导出模块的方式
// 主订单
const MainOrder = {
OrderNo:"",
OrderUser:0,
OrderTime:"",
OrderDetail:[]
}
// 子订单
const DetailOrder = {
ProdID:0,
ProdNum:0,
ProdPrice:0.00
}
export default { // 简单工厂模式
create(name){ // 创建一个实体类
if (name == "main"){
return MainOrder;
}else if (name == "detail"){
return DetailOrder;
}
}
}
然后我们在入口文件index.js里就可以这样来创建实体:
import OrderFactory from "./Orders"; // 引入
var mainOrder = OrderFactory.create("main"); // 创建主订单实体
console.log(mainOrder.OrderUser); // 打印下单人
我们测试一下
cd 到项目根目录
npm run b #b是package.json里配置的script
终端输出:
> js-demo@1.0.0 b /Applications/MAMP/htdocs/js-demo
> babel-node index.js
0
成功打印出MainOrder对象里的OrderUser属性值:0
利用工厂模式的优势
利用工厂模式,我们可以在初始化的时候传入更多的参数。
Orders.js:
// 主订单
const MainOrder = {
OrderNo:"0000",
OrderUser:0,
ProdsNum:0,
OrderTime:"",
OrderDetail:[]
}
// 子订单
const DetailOrder = {
ProdID:0,
ProdNum:0,
ProdPrice:0.00
}
export default { // 简单工厂模式
create(name,OrderNo,OrderUser,ProdsNum){ // 创建一个实体类
if (name == "main"){
MainOrder.OrderNo = OrderNo;
MainOrder.OrderUser = OrderUser;
MainOrder.ProdsNum = ProdsNum;
return MainOrder;
}else if (name == "detail"){
return DetailOrder;
}
}
}
使用的时候:
OrderFactory.create("main","001","1900",100);
我们不是使用上面的方式,还可以使用es 2015的『延展操作符』
index.js:
import OrderFactory from "./Orders"; // 引入
var initData = ["001","1900",100]; //
// 创建主订单实体
var mainOrder = OrderFactory.create("main",...initData); // "..."延展操作符
console.log(mainOrder.OrderUser); // 打印下单人
// 打印结果是:1900
1691



被折叠的 条评论
为什么被折叠?



