网站首页 > 技术文章 正文
建造者模式
Bash
'use strict';
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(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(des) {
this.workDescript = des;
};
/**
* 应聘者建造者
*
* @param name 姓名(全名)
* @param 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)
单例模式
单例模式(创建命名空间)
Bash
'use strict';
var A = {
Util: {
util_method1: function() {},
util_method2: function() {}
},
Tool: {
tool_method1: function() {},
tool_method2: function() {}
},
Ajax: {
get: function() {},
post: function() {}
},
others: {
// ...
}
};
A.Util.util_method2();
A.Tool.tool_method1();
A.Ajax.get();
静态变量(无法修改的静态变量)
Bash
'use strict';
var Config = (function() {
// 私有变量
var config = {
MAX_NUM: 100,
MIN_NUM: 1,
COUNT: 1000
};
// 返回取值器对象
return {
// 取值器方法
get: function(name) {
return config[name] ? config[name] : null;
}
}
})();
var count = Config.get('COUNT');
console.log(count);
惰性单例
Bash
'use strict';
// 惰性载入单例
var LazySingle = (function() {
// 单例实例引用
var _instance = null;
// 单例
function Single() {
// 这里定义私有属性和方法
return {
publicMethod: function() {},
publicProperty: '1.0'
}
}
return function() {
if (!_instance) {
_instance = Single();
}
// 返回单例
return _instance;
}
})();
console.log( LazySingle().publicProperty ); // 1.0
console.log( LazySingle() === LazySingle() ); // true
代理模式
Bash
// 先声明美女对象
var girl = function (name) {
this.name = name;
};
// 这是dudu
var dudu = function (girl) {
this.girl = girl;
this.sendGift = function (gift) {
alert("Hi " + girl.name + ", dudu送你一个礼物:" + gift);
}
};
// 大叔是代理
var proxyTom = function (girl) {
this.girl = girl;
this.sendGift = function (gift) {
(new dudu(girl)).sendGift(gift); // 替dudu送花咯
}
};
var proxy = new proxyTom(new girl("酸奶小妹"));
proxy.sendGift("999朵玫瑰");
Bash
欢迎关注
猜你喜欢
- 2025-06-13 Linux 上利用Nginx代理uWSGI处理Flask web应用
- 2025-06-13 如何隐藏代理器服务地址?企业级IP匿名化与反追踪技术
- 2025-06-13 宝塔面板使用Nginx反向代理解决跨域问题
- 2025-06-13 海尔集团武汉中心总经理孙梁君——以智慧家电 升级品质生活
- 2025-06-13 给小白的 Nginx 10分钟入门指南(nginx入门教程)
- 2025-06-13 反向代理以及其使用场景(反向代理啥意思)
- 2025-06-13 Vue炼金术:解锁前端开发的进阶之道
- 2025-06-13 93.8k Star 的内网穿透神器 frp:DIY开发者必备的反向代理
- 2025-06-13 Nginx正向代理、反向代理、负载均衡及性能优化
- 2025-06-13 深入理解跨域及常见误区揭秘(深入理解跨域及常见误区揭秘论文)
你 发表评论:
欢迎- 574℃几个Oracle空值处理函数 oracle处理null值的函数
- 570℃Oracle分析函数之Lag和Lead()使用
- 556℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 553℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 549℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 540℃【数据统计分析】详解Oracle分组函数之CUBE
- 529℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 524℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)