单例模式-3.透明的单例模式
生活随笔
收集整理的這篇文章主要介紹了
单例模式-3.透明的单例模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>透明的單利模式</title></head><body></body><script type="text/javascript">//用戶從這個類中創建對象的時候,可以像使用其他任何普通類一樣var CreateDiv = (function() {var instance;var CreateDiv = function(html) {if(instance) {return instance;}this.html = html;this.init();return instance = this;};CreateDiv.prototype.init = function() {var div = document.createElement("div");div.innerHTML = this.html;document.body.appendChild(div);};return CreateDiv;})()var a = new CreateDiv('seven1');var b = new CreateDiv('seven2');console.log(a === b); //true/*為了把 instance 封裝起來,我們使用了自執行的匿名函數和閉包,并且讓這個匿名函數返回真正的 Singleton 構造方法,這增加了一些程序的復雜度,閱讀起來也不是很舒服CreateDiv 的構造函數實際上負責了兩件事情。第一是創建對象和執行初始化 init 方法,第二是保證只有一個對象。雖然我們目前還沒有接觸過“單一職責原則”的概念,但可以明確的是,這是一種不好的做法,至少這個構造函數看起來很奇怪假設我們某天需要利用這個類,在頁面中創建千千萬萬的 div,即要讓這個類從單例類變成一個普通的可產生多個實例的類,那我們必須得改寫 CreateDiv 構造函數,把控制創建唯一對象的那一段去掉,這種修改會給我們帶來不必要的煩惱*///用代理實現單利模式;解決上面的問題var CreateDiv2 = function(html) {this.html = html;this.init();}CreateDiv2.prototype.init = function() {var div = document.createElement('div');div.innerHTML = this.html;document.body.appendChild(div);};//引入代理類var ProxySingleCreateDiv = (function() {var instance;return function(html) {if(!instance) {instance = new CreateDiv2(html);}return instance;}})()var a1 = new ProxySingleCreateDiv('seven1');var b1 = new ProxySingleCreateDiv('seven2');console.log(a1 === b1);</script></html>
?
轉載于:https://www.cnblogs.com/hanhui66/p/7110740.html
總結
以上是生活随笔為你收集整理的单例模式-3.透明的单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科沃斯旺宝与阿里云联合参加通信展
- 下一篇: 营业额破千亿美元的亚马逊仍难令华尔街满意