建造者模式(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)
