资讯专栏INFORMATION COLUMN

设计模式——建造者模式

jeffrey_up / 1605人阅读

摘要:建造者模式示例描述将一个复杂的对象构建层与其表示层相互分离同样的构建过程中可采用不同的表示建造者模式与工厂模式的不同之处在于它更多关心创建对象的过程甚至于每一个创建对象的细节案例有一批求职者到招聘网站发布自己的简历要求除了兴趣爱好可以发布在

建造者模式 示例 描述

将一个复杂的对象构建层与其表示层相互分离, 同样的构建过程中可采用不同的表示. 建造者模式与工厂模式的不同之处在于, 它更多关心
创建对象的过程, 甚至于每一个创建对象的细节.

案例

有一批求职者到招聘网站发布自己的简历.要求:除了兴趣爱好可以发布在页面上, 个人联系方式不能发布, 要让需求公司找招聘平台.
需要找的工作可以分类.

分析明确创建内容:

创建用户信息如用户名等需要独立处理, 因为需要隐藏显示

应聘者需要独立创建, 因为他们代表一个整体

工作职位需要独立创建, 因为他们是应聘者拥有的一部分, 而且种类较多

实现
// 创建一位人类
var Human = function(param) {
    this.skill = param && param.skill || "保密";
    this.hobby = param && param.hobby || "保密";
};

Human.prototype = {
    getSkill: function() { return this.skill },
    getHobby: function() { return this.hobby }
};

// 实例化姓名类
var Named = function(name) {
    var that = this;
    // 构造器解析姓名的姓与名
    (function(name, that) {
        that.wholeName = name;
        if(name.indexOf(" ") > -1) {
            that.FirstName = name.slice(0, name.indexOf(" "));
            that.secondName = name.slice(name.indexOf(" "));
        }
    })(name, that);
};

// 实例化职位类
var Work = function() {
    var that = this;
    // 构造器中通过传入的职位特征来设置相应职位以及描述
    (function(work, that) {
        switch(work) {
            case "code":
                that.work = "工程师";
                that.workDescript = "每天沉醉于编程";
                break;
            case "UI":
                // ...
            case "UE":
                // ...
            default:
                that.work = work;
                that.workDescript = "对不起, 我们还不清楚您所选择职位的相关描述";

        }
    })(work, that);
};

//更换期望的岗位
Work.prototype.changeWork = function(work) {
    this.work = work;
};

// 添加对职位的描述
Work.prototype.changeDescript = function(setence) {
    this.workDescript = setence;
};

/**
 * 应聘者建造者
 * 参数 name: 姓名
 * 参数 work: 期望职位
 */
var Person = function(name, work) {
    // 创建应聘者缓存对象
    var _person = new Human();
    // 创建应聘者姓名解析对象
    _person.name = new Named(name);
    // 创建应聘者期望职位
    _person.work = new Work(work);
    // 将应聘者对象返回
    return _person;
};

// test:
var person = new Person("xiao ming", "code");
console.log(person.skill);                        // 保密
console.log(person.name.FirstName);                // xiao
console.log(person.work);                        // 工程师
console.log(person.work.workDescript);            // 每天沉醉于编程

person.work.changeDescript("更改一下职位描述");
console.log(person.work.workDescript);             // 更改一下职位描述

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80151.html

相关文章

  • 深入理解建造模式 ——组装复杂的实例

    摘要:而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。最后通过一个套餐实例,介绍了建造者模式在实例中的基本使用手段。 历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 无论是在现实世界中还是在软件...

    sanyang 评论0 收藏0
  • 我的Java设计模式-建造模式

    摘要:汽车本身就是复杂产品对象,其制造过程可以形象的表示建造者模式。另一辆法拉利,。法拉利具体建造者代码如下构造法拉利的第一部分。咻咻法拉利已造好三建造者模式的优缺点优点降低代码耦合度。 在未上大学之前,一直有个梦想I have a dream!,就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女。咳咳~~虽然现在没实现我的dream,但梦想还是得有的。 说到...

    elisa.yang 评论0 收藏0
  • PHP设计模式(五)建造模式(Builder)

    摘要:与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类导演类。 什么是建造者设计模式 建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式。 设计场景: 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,爱好等信息,才能获得用户具体的信息结果。如: 这是一个...

    KunMinX 评论0 收藏0
  • JavaScript设计模式系列三:建造模式

    摘要:优点建造者模式的封装性很好,对象本身与构建过程解耦。建造者模式很容易进行扩展。适用场景需要生成的对象具有复杂得内部结构且内部属性本身相互依赖建造者模式的代码实现建造者模式主要有个部分产品类建造者类指挥者类客户。建造者完成相应的部分。 建造者模式 建造者模式(builder pattern)比较简单,它属于创建型模式的一种,将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与...

    CloudDeveloper 评论0 收藏0
  • JS 设计模式 八(建造模式

    摘要:即建造者模式可以强制实行一种分步骤进行的建造过程。指导类负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类建造者模式优点建造者模式的封装性很好。 建造者模式 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着一个复杂对象的创建工作,由于需求的变化,这个复杂对象的某些部分经常面临着剧烈的变化...

    tanglijun 评论0 收藏0

发表评论

0条评论

jeffrey_up

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<