网站首页 > 技术文章 正文
建造者模式
'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)
单例模式
单例模式(创建命名空间)
'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();
静态变量(无法修改的静态变量)
'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);
惰性单例
'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
代理模式
// 先声明美女对象 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朵玫瑰");
欢迎关注
猜你喜欢
- 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 深入理解跨域及常见误区揭秘(深入理解跨域及常见误区揭秘论文)
你 发表评论:
欢迎- 最近发表
-
- Python常用标准库(pickle序列化和JSON序列化)
- Linux json-c使用_linux解析json数据
- 源码推荐(03.04):微信支付的测试,Json数据解析
- 打开JSON文件的六种方法,总有一种适合你
- springmvc项目中接收Android提交json数据
- 一篇文章让你详细了解何为JSON_json到底是什么
- FlinkSQL处理复杂JSON的思路_flinksql解析json数组
- 超级好用的轻量级JSON处理命令jq_json使用教程
- .NET性能系列文章二:Newtonsoft.Json vs System.Text.Json
- 推荐几个开发必备的JSON工具_推荐几个开发必备的json工具
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)