1 工厂模式

简单的工厂模式可以理解为解决多个相似的问题;

function CreatePerson(name,age,sex) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sex = sex;
obj.sayName = function(){
return this.name;
}
return obj;
}
var p1 = new CreatePerson("longen",'28','男');
var p2 = new CreatePerson("tugenhua",'27','女');
console.log(p1.name); // longen
console.log(p1.age); //
console.log(p1.sex); // 男
console.log(p1.sayName()); // longen console.log(p2.name); // tugenhua
console.log(p2.age); //
console.log(p2.sex); // 女
console.log(p2.sayName()); // tugenhua

2单例模式

只能被实例化(构造函数给实例添加属性与方法)一次

// 单体模式
var Singleton = function(name){
this.name = name;
};
Singleton.prototype.getName = function(){
return this.name;
}
// 获取实例对象
var getInstance = (function() {
var instance = null;
return function(name) {
if(!instance) {//相当于一个一次性阀门,只能实例化一次
instance = new Singleton(name);
}
return instance;
}
})();
// 测试单体模式的实例,所以a===b
var a = getInstance("aa");
var b = getInstance("bb");

3 沙箱模式

将一些函数放到自执行函数里面,但要用闭包暴露接口,用变量接收暴露的接口,再调用里面的值,否则无法使用里面的值

let sandboxModel=(function(){
function sayName(){};
function sayAge(){};
return{
sayName:sayName,
sayAge:sayAge
}
})()

4 发布者订阅模式

就例如如我们关注了某一个公众号,然后他对应的有新的消息就会给你推送,

//发布者与订阅模式
var shoeObj = {}; // 定义发布者
shoeObj.list = []; // 缓存列表 存放订阅者回调函数 // 增加订阅者
shoeObj.listen = function(fn) {
shoeObj.list.push(fn); // 订阅消息添加到缓存列表
} // 发布消息
shoeObj.trigger = function() {
for (var i = 0, fn; fn = this.list[i++];) {
fn.apply(this, arguments);//第一个参数只是改变fn的this,
}
}
// 小红订阅如下消息
shoeObj.listen(function(color, size) {
console.log("颜色是:" + color);
console.log("尺码是:" + size);
}); // 小花订阅如下消息
shoeObj.listen(function(color, size) {
console.log("再次打印颜色是:" + color);
console.log("再次打印尺码是:" + size);
});
shoeObj.trigger("红色", 40);
shoeObj.trigger("黑色", 42);

代码实现逻辑是用数组存贮订阅者, 发布者回调函数里面通知的方式是遍历订阅者数组,并将发布者内容传入订阅者数组

更多设计模式请戳:Javascript常用的设计模式详解

最新文章

  1. AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking
  2. 一分钟搞定AlloyTouch图片轮播
  3. AngularJS 之 Factory vs Service vs Provider【转】
  4. 利用bootstrap写图片轮播
  5. 设计模式之 -- 状态模式(State)
  6. pre标签避免一行过长打破格局
  7. 从数据包谈如何封杀P2SP类软件
  8. laravle faker
  9. Struts+Hibernate+jsp页面 实现分页
  10. 29.DDR2问题1仿真模型文件
  11. Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout
  12. C# json与对象之间的相互转换
  13. Django 入门
  14. 安卓各文件存储路径汇总(Android file path)
  15. JavaScript 开发经验整理
  16. dubbo Forbid blacklist
  17. python 垃圾回收机制的思考
  18. 19 主线程向子线程发送信息(handler)
  19. python发送手机动态验证码
  20. C-Free 5.0 注册码

热门文章

  1. HDOJ 4857 逃生
  2. Java 设计模式—装饰者模式
  3. 开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
  4. Swift基础(类,结构体,函数)
  5. FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】
  6. ANDROID窗体管理服务实现机制和架构分析
  7. Codeforces Round #276 (Div. 1) A. Bits 贪心
  8. leetcode排列组合相关
  9. C语言程序创建文件夹
  10. html5 历史管理