zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式:将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。

    // 创建一位人类
    var Human = function(params){
        var skill = params && params.skill || '保密';
        var hobby = params && params.hobby || '保密';
    }
    // 人类原型方法
    Human.prototype = function(){
        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.lastName = name.slice(name.indexOf(' '));
            }
        })(name,that)
    }
    // 实例化职位类
    var Work = function(work){
        var that = this;
        //构造器
        //构造函数中通过传入职位特征来设置相应职位以及描述
        (function(work,that){
            switch(work){
                case 'code':
                  that.work = '工程师';
                  that.workDescript = '每天沉醉编程';
                  break;
                case 'UI':
                case 'UE':
                  that.work = '设计师';
                  that.workDescript = '设计更是一种艺术';
                  break;
                case 'teach':
                  that.work = '教师';
                  that.workDescript = '分享也是一种快乐';
                  break;
                default:
                  that.work = work;
                  that.workDescript = '对不起,我们还不清楚您所选择职位的相关描述';
            }
        })(work,that)
    }
    // 更换期望职位
    Work.prototype.changeWork = function(work){
        this.work = work;
    }
    // 添加对职位的描述
    Work.prototype.changeDescript = function(stence){
        this.workDescript = stence;
    }
    
    
    /*
     * 应聘者建造
     * 参数name:姓名(全名)
     * 参数work:期望职位
     **/
     var Person = function(name,work){
         //创建应聘者缓存对象
         var _person = new Human();
         //创建应聘者姓名解析对象
         _person.name = new Named(name);
         //创建应聘者期望职位
         _person.work = new Work(work);
         //将创建的应聘者对象返回
         return _person;
     }
    
    
    // 测试:
    var person = new Person('xiao ming','code');
    
    
    console.log(person.name.FirstName);    //xiao
    console.log(person.skill);             //保密
    console.log(person.work.work);         //工程师
    console.log(person.work.workDescript); //每一天在编程中度过
    person.work.changeDescript('更改一下职位描述!');
    console.log(person.work.workDescript); //更改一下职位描述!

    工厂模式创建出的是一个对象,它追求的是创建的结果,别无他求,所以那仅仅是一个实实在在的创建过程。

    建造者模式不仅仅可得到创建的结果,也参与了创建的具体过程,对于创建的具体实现的细节也参与了干涉,或者说这种模式创建的对象是一个复合对象。

    当然这种方式对于整体对象的拆分无形中增加了结构的复杂性,因此如果对象粒度很小,或者模块间的复用率很低并且变动不大,最好还是要创建整体对象。

  • 相关阅读:
    python学习笔记(二)-字符串方法
    python学习笔记(一)-基础知识
    Charles抓包工具断点修改返回内容
    Charles抓包工具过滤网络请求
    Jmeter通过正则表达式提取器提取响应结果数据
    【PHP】什么时候使用Try Catch(转)
    【tp5.1】七牛云上传图片
    【PHP】统计问卷调查结果的选项票数和百分比
    【tp5.1】composer安装PHPExcel以及导入导出Excel
    【tp5.1】微信公众号授权登录及获取信息录入数据库
  • 原文地址:https://www.cnblogs.com/wujiaqi/p/10274108.html
Copyright © 2011-2022 走看看