什么是模式?
-
什么是设计模式?
-
设计模式是解决软件设计常见问题的可复用方案
什么是反模式?
-
反模式是一种针对某个特定问题的不良解决方案,该方案会导致槽糕的情况发生
- 定义大量污染全局的变量
- 修改Object类的原型
- 使用document,write创建页面
- 硬编码,写死功能等
单例模式?
-
- 确保一个类只能有一个实例
- 节约资源,控制入口
- 拓展困难,不可职责过重
var kingSingLeton = (function()
{
var instance;
function init() {
return {
command: function () {
console.log('I`M King');
}
}
}
return {
getInstance: function () {
if (!instance) {
instance = init();
}
return instance;
}
}
}());
var mayKingA = kingSingLeton.getInstance();
mayKingA.command();
var myKingB = kingSingLeton.getInstance();
myKingB.command();
适配器模式?
-
-
不影响现在实现方式,兼容调用旧接口的代码 简单、提高复用性 过多使用导致系统层级复杂
function useOldEarphone() {
console.log('playMusic');
}
function adapter() {
console.log('这里我需要做一些适配');
return useOldEarphone();
}
var IP6 = useOldEarphone();
var IP7 = adapter();
装饰器模式?
-
- 在不修改类原来的接口下,动态地为对象添加功能
- 扩展对象更灵活,可组合
- 增加复杂性
function BeanMilk() {
this.price = 1;
}
function addEgg(milk) {
milk.egg = '加了鸡蛋';
milk.price += 1;
}
function addSugar(milk) {
milk.sugar = '加了白糖';
milk.price +=0.5;
}
function addHoney(milk) {
milk.honey = '加了蜂蜜';
milk.price +=1.5;
}
var beadMilk1 = new BeanMilk();
addEgg(beadMilk1);
addSugar(beadMilk1);
var beadMilk2 = new BeanMilk();
addEgg(beadMilk1);
addHoney(beadMilk1);
观察者模式(发布者-订阅者模式)?
-
function Observer() {
this.update = function (context) {
console.log('主播上线了!',context);
}
}
function Subject() {
this.observers = [ ];
}
Subject.prototype.addObserver = function (observer) {
this.observers.push(observer);
};
Subject.prototype.removeObserver = function (observer) {
var index = this.observers.indexOf(observer);
this.observers.slice(index,1);
};
Subject.prototype.notify = function (context) {
var observerLength = this.observers.length;
for(var i = 0;i<observerLength;i++){
this.observers[i].update(context);
}
}
var littleXin = new Observer('小新');
var bigXin = new Observer('大新');
var ladyD = new Subject('主播D');
ladyD.addObserver(bigXin);
ladyD.addObserver(littleXin);
ladyD.notify('我是主播D,我来开直播了');