本文主要介绍软件设计中运用到的几个主要的设计原则,“单一职责原则” “开放-封闭原则” “最少知识原则”
单一职责原则
SRP:Single responsibility principle 原则体现为:一个对象(方法或者类)只做一件事情
eg: 使用单例模式创建一个登陆浮窗, 最开始代码如下:
var createLoginLayer = (function () {
var div;
return function () {
if(!div) {
div = document.createElement('div')
div.innerHTML = "登陆浮窗"
div.style.display = 'none'
document.body.appendChild(div)
}
return div
}
})
使用单一原则改动,把单例的职责和创建登陆浮窗的职责分别封装在两个方法中,这两个方法可以独立变化而互不影响,当它们连接在一起的时候,就完成了创建唯一浮窗的功能,代码如下:
var createLoginLayer = function () {
var div = document.createElement('div')
div.innerHTML = "登陆浮窗"
div.style.display = 'none'
document.body.appendChild(div)
return div
}
var getSingle = function (fn) {
var result
return function () {
return result || (result = fn.apply(this, arguments))
}
}
var createSingleLoginLayer = getSingle(createLoginLayer)
createSingleLoginLayer()
最少知识原则
迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP)软件实体应该与其他实体尽可能少的发生作用和联系,这里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。
开放-封闭原则
开放-封闭原则最早由Eiffel 语言的设计者Bertrand Meyer 在其著作 Object-Oriented Software Construction中提出。它的定义如下:
软件实体(类、模块、函数)等应该是可以扩展的,但是不可修改。
开放封闭原则在设计模式中的体现是装饰着模式中,还有在 发布-订阅模式、模板方法模式、策略模式、代理模式、职责链模式中皆有体现。