정의 : 객체 (클래스)에 인스턴스가 하나만 있고 액세스 할 수있는 전역 액세스 포인트를 제공하는지 확인하십시오.
구현 원칙 : 클로저를 사용하여 처음으로 생성 된 유일한 인스턴스를 보유하는 로컬 변수에 대한 참조를 유지합니다.
주로 사용 : 고유 한 인스턴스 만 필요한 경우 글로벌 캐시, 로그인 플로팅 창 등;
1. 비 싱글 톤 패턴 객체 (예 : 데모)에 대한 싱글 톤 패턴을 구현하는 방법 :
싱글 톤을 구현하기 위해 데모에 정적 메소드를 추가하십시오.
demo.getSingle = (function () {var demo = null; return function (name) {if (! demo) {demo = new demo (name);} return demo;}}) ();용법:
비 싱턴 모드 : var a = 새로운 데모 ( 'Peter');
싱글 톤 모드 :
var b1 = demo.getsingle ( 'peter'); var b2 = demo.getsingle ( 'sufei'); b1 === b2; // true, 모든 참조 새 데모 ( 'Peter')
프록시 클래스를 통해 싱글 톤 구현 :
var proxydemo = (function () {var demo = null; return function (name) {if (! demo) {demo = new demo (name);} return demo;}}) ();용법:
비 싱턴 모드 : var a = 새로운 데모 ( 'Peter');
싱글 톤 모드 : var b = 새로운 proxydemo ( 'Peter');
2. 게으른 싱글 톤 패턴 : 필요할 때만 싱글 톤을 만듭니다.
일반적인 게으른 싱글 톤을 만드는 방법은 다음과 같습니다.
var getsingle = function (foo) {var single = null; return function () {반환 단일 || (단일 = foo.apply (this, arguments)); }};용법:
var createLoginLayer = function () {var fragment = document.createdOcumentFragment (); var div = document.createelement ( 'div'); div.style.display = 'none'; // 다음은 div ... document.body.appendChild (Frag.AppendChild (div))에 다른 로그인 요소를 추가합니다. return div;} var createSingleLoginLayer = getSingle (createLoginLayer); // 사용자가 버튼을 처음 클릭하면 (id = 'lgbtn') 로그인 창을 작성하고 표시합니다. 버튼의 클릭을 반복 한 후 반복적으로 생성되지 않습니다. document.getElementById ( 'lgbtn'). onclick = function () {var lg = createSingLeLogInlayer (); lg.style.display = 'block';}첨부 : 숫자 시퀀스 계산과 같은 캐시 함수의 계산 결과
다음은 캐시없이 쓰는 방법입니다. 매우 느립니다!
함수 foo (n) {results = n <2? n : foo (n -1) + foo (n -2); Return results;} console.log (foo (40)); // 몇 초 동안 계산해야합니다다음은 캐시 쓰기 방법이며 결과는 기본적으로 즉시 생성됩니다!
var cache = {}; function foo (n) {if (! cache [n]) {cache [n] = n <2? n : foo (n -1) + foo (n -2); } return cache [n];} console.log (foo (100));더 나은 글쓰기 :
var foo = (function () {var cache = {}; return function (n) {if (! cache [n]) {cache [n] = n <2? n : foo (n -1) + foo (n -2);} return cache [n];};}) (); console.log (100));참조 :
"JavaScript 모드"
"자바 스크립트 디자인 패턴 및 개발 실습"
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.