建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式
官方:将一个复杂对象的构建层与其表示层相互分离、同样的构建过程可采用不同的表示。
个人理解:建造者模式相对工厂模式更多的就是把功能拆分成不同业务类、然后聚合成一个业务类统一输出、更适合去写业务、这样扩张性、延伸性都好、解耦、如果使用一个工厂模式那就将庞大的业务聚合在一块了、拆分成不同的类去聚焦实现过程、当然最终产生的依然是对象实列!、
建造者模式和工厂模式的区别
- 注重点不同:建造者模式更注重 方法的调用顺序,工厂模式 注重于创建产品,不关心方法的调用顺序
- 创建对象的力度不同:建造者可以创建复杂的产品,由各种复杂的部件组成,工厂模式创建的都是相同的实例对象
案例:求职者对象类
业务描述:有很多发布者需要在平台发布自己的简历、这就涉及到这个用户的【基本信息】【兴趣爱好】【技能】【特长】【描述】【职位】…..等等
// 实列化姓名类
class HumanNamed{
constructor(name){
this.wholeName = name;
if(name.indexOf(' ') > -1){
this.FirstName = name.slice(0, name.indexOf(' '));
this.secondName = name.slice(name.indexOf(' '));
}
}
}
// 实列化职位类
class work extends HumanNamed{
constructor(name, work){
super(name)
this.getWork(work)
}
getWork(work){
switch(work){
case 'code':
this.work = '工程师'
this.workDescript = '沉浸在编程世界!'
break;
case 'UI':
this.work = '设计师'
this.workDescript = '设计是一门艺术的体现!'
case 'teach':
this.work = '教师'
this.workDescript = '分享知识是一种快乐!'
default:
this.work = work;
this.workDescript = '对不起、我们还不清楚你的职位和职位描述'
}
}
changeWork(work){
this.work = work;
}
changeDescript(setence){
this.workDescript = setence;
}
}
// 创建人 类
class Human extends HumanNamed{
constructor(name, work, skill, hobby) {
super(name, work)
this.skill = skill || '保密';
this.hobby = hobby || '保密';
}
getSkill(){
return this.skill;
}
getHobby(){
return this.hobby;
}
}
/*
* 应聘者建造者(聚合发布者类)
* 参数 name : 姓名(全民)
* 参数 work : 期望职位
* 参数 skill : 技能
* 参数 hobby : 兴趣
*/
class Person extends Human {
constructor({name, skill, hobby, work}){
super(name, work, skill, hobby)
}
}
let person = new Person({
name:'张三',
skill:'web',
hobby:'code',
work:'code'
})
console.log(person)