javascript
JavaScript设计模式——单例模式的理解与应用
JavaScript設計模式——對單例模式的一些見解
JavaScript設計模式主要分類:
①創建型設計模式,例如單例模式、工廠模式
②結構型設計模式,例如裝飾者模式、適配器模式
③行為型設計模式,例如觀察者模式、訪問者模式
④技巧型設計模式,例如委托模式、數據訪問隊形模式
⑤結構型設計模式,例如MVC模式、MVVM模式、MVP模式
本文討論的是JavaScript中最常見的設計模式:單例模式,適合對JavaScript設計模式沒什么太多了解的伙伴。
單例模式出現的背景:
以下為一段用于前后端交互的js
function getUserInfo() {// 獲取用戶信息}function setUserInfo(param) {// 設置用戶信息}function getCount() {// 登錄}function logout() {// 注銷}這樣寫的弊端:因為function getUserInfo(){}相當于 var getUserInfo = function(){},產生了很多全局變量,例子舉的例子算是比較特殊的了,如果是比較大眾一點的變量名,就很容易產生沖突。
如何解決?
使用單例模式定義命名空間:
var requestUtil = {getUserInfo: function () {// 獲取用戶信息},setUserInfo: function (param) {// 設置用戶信息},login: function () {// 登錄},logout: function () {// 注銷}}函數的調用:當需要獲取用戶信息時,requestUtil.getUserInfo()即可。
使用單例模式創建小型代碼庫:
var X = {Util: {util1: function () {},util2: function () {}},Ajax: {get: function () {},post: function () {}},Others: {function1: function () {},function2: function () {}}}使用方法:X.Ajax.get()
使用單例模式管理靜態變量:
背景:我們都知道,JavaScript沒有static這類關鍵字,所以定義任何變量理論上都是可以改變的(ES6前,因為ES6出現了類似的const,用于定義常量),那么在ES6前,想定義一個靜態變量,原意是不想改變的,可實質上它又能被改變,應該如何做到不能被改變?答案如下:
var Conf = (function () {// 私有變量var conf = {MAX_NUM: 100,MIN_NUM: 1,COUNT: 1000}// 返回取值函數return {get: function (name) {retrun conf[name] ? conf[name] : null}}})()沒有定義賦值函數,因此里邊的變量自然就不能被改變。
使用方法: var count = Conf.get('MAX_NUM')
惰性單例:
說明:用于延遲單例對象的創建,即惰性創建。
var LazySingle = (function () {var _instance = nullfunction Single () {return {publicMethod: function () {return this.publicProperty},publicProperty: '1.0'}}return function () {if (!_instance) {_instance = new Single()}return _instance}})()console.log(LazySingle().publicMethod())總結
以上是生活随笔為你收集整理的JavaScript设计模式——单例模式的理解与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue项目中公用footer组件底部位置
- 下一篇: 征婚交友宣传文案30句