通过多个简单对象的有序组合,装配出一个复杂对象,就叫做建造者模式。
如果创建一个对象特别复杂,其中有多个成员需要单独处理,我们可以把需要单独处理的成员抽象为子类,由子类实现具体的组建过程。
比如要创建一个实习人员的岗位信息,其中学历和职位需要单独处理:
例子:
// 基本信息类 var Person = function (name, age, sex) { this.name = name; this.age = age; this.sex = sex; } // 学历类 var School = function (school) { this.leve = school + (function (school) { switch (school) { case '专科': return school + ':实习工资1000~2000元'; break; case '本科': return school + ':实习工资2000~4000元'; break; case '研究生': return school + ':实习工资4000~6000元'; break; } })(school); } // 职位类 var Work = function (work) { this.role = work + (function (work) { switch (work) { case '前端': return ':掌握JavaScript、CSS、HTML'; break; case '后端': return ':掌握Java、PHP、SQL'; break; case '运维': return ':掌握linux、OpenStack、Hadoop'; break; } })(work); } // 建造者模式 var worker = function (name, age, sex, school, work) { var _p = new Person(name, age, sex); _p.school = new School(school); _p.work = new Work(work); return _p; }; //调用建造者函数 var p = worker('Tom', '21', 'male', '本科', '前端'); // 测试 console.log(p.name); //输出 Tom console.log(p.age); //输出 21 console.log(p.sex); //输出 male console.log(p.school.leve); //输出 本科 console.log(p.work.role); //输出 前端
建造者模式与工厂模式非常相似,但它们的侧重点不同:工厂模式的主要职责是创建,而建造者模式的主要职责是对对象的组装,顺序不同往往创建的对象也不同。
如有错误,欢迎指正,本人不胜感激。