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

    建造者模式

    • 概念
      将一个复杂对象的构建层与其表示层相互分离,同样的构造过程可以采用不同的表示。

    • 使用及与工厂模式的区别
      比如说我们在网站上给别人推送一些简历的时候,我们就需要隐藏一些求职者的信息来获取利益,这时我们就需要抽象提取应聘者的部分信息,我们就可以试试建造者模式,所谓建造者模式是一种新的模式,他与之前的工厂模式有一定的区别,工厂模式主要是为了创建对象实例或者类簇(抽象工厂),关心的是最终创建的是什么,不关心创建的过程。然而建造者模式在创建对象时要更为复杂一些,虽然其目的也是为了创建对象,但是她更关心的是创建对象的过程,甚至于创建对象的每一个细节。就像我们在创建一个应聘者,不仅要关心创建一个人,还要关心这个人的一些细微的信息。

    • 建造者模式小例

        //创建一位人类
        var Human = function(param){
        	//技能
        	this.skill = param && param.skill || '保密';
        	//兴趣爱好
        	this.hobby = param && param.skill || '保密';
        }
        //类人原型方法
        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(work){
        	var that = this;
        	//构造器
        	//构造函数中通过传入的职业特征来设置相应职业以及描述
        	(function(work, that){
        	    switch(work){
        	    	case 'code': 
            	    	that.work = '工程师';
            	    	that.workDescript = '每天沉醉于编程';
            	    	break;
            	    case 'UI':
            	        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(setence){
        	this.workDescript = setence;
        }
      
        //创建一名应聘者
        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('小明', 'code');
        console.log(person.skill);//保密
        console.log(person.name.firstname);//小明
      

    在这里我们创建了三个类,应聘者类、姓名解析类、期望职业类。我们对应聘者类传入的参数进行的处理,就是&&和||的运用。如:this.skill = param && param.skill || '保密';表示,如果存在param这个参数,并且该参数拥有skill属性就用这个属性赋值给this的skill属性,否则将用默认值“保密来设置。”

  • 相关阅读:
    jQuery 对象 等操作
    根据文件大小自动判断单位B,KB,MB,GB
    PHP 根据子ID递归获取父级ID,实现逐级分类导航效果
    JQuery 目录树jsTree插件用法
    关于循环列表中包含递归函数的问题
    PHP文件上传大小限制问题
    UEditor+七牛,实现图片直连上传
    修改Ueditor的图片上传地址
    Thinkphp3.2.3加载外部类并调用类里面的方法 获取token
    七牛云--开发笔记
  • 原文地址:https://www.cnblogs.com/yehui-mmd/p/6502634.html
Copyright © 2011-2022 走看看