이 기사의 내용은 js 디자인 패턴에 대한 매우 자세한 소개입니다. 필요한 친구가 참조할 수 있습니다.
js 디자인 패턴
<br>
2017년 1월 14일 | 학습 노트 | 조회수 3387개
<br>
목차
머리말
공장 모드
반복자 패턴
데코레이터 패턴
전략 모드
외관 모드
에이전트 모드
중간 모드
관찰자 모드
서문
이 문서에서는 "javascript"를 참조합니다. 모드'를 선택하므로 내용은 책과 동일합니다. 이 책을 가지고 있는 친구는 직접 읽을 수 있습니다. 내 기억 습관은 책을 복사하는 것이기 때문에 먼저 복사한 다음 블로그에 게시하겠습니다.
싱글 모드<br>
싱글턴 모드의 아이디어는 특정 클래스의 인스턴스가 하나만 있도록 보장하는 것입니다. 즉, 동일한 클래스를 사용하여 두 번째로 객체를 생성할 때 정확히 다음을 얻어야 한다는 의미입니다. 처음 생성했을 때와 동일한 객체입니다. 방법 1
<br>
로그인 후 복사
function Universe(){
if(typeof Universe.instance==="object"){
return Universe.instance; //防止被篡改
}
this.xx="xx";
Universe.instance=this;
return this;
}
var uni=new Universe();
var uni2=new Universe();
uni===uni2; //true
로그인 후 복사
<br/>
缺点
instance 属性暴露。
方法二
使用闭包
<br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
function Universe(){
var instance=this; //缓存this
this.xx="xx";
Universe=function(){ //重写此构造函数
return instance;
}
}
var uni=new Universe();
var uni2=new Universe();
uni===uni2; //true
var uni = new Universe();
Universe.prototype.a = 1
var uni2 = new Universe();
console.log(uni === uni2) //true
console.log(uni.a) //undefinded
console.log(uni2.a) //undefinded
console.log(uni.constructor === Universe); //false
로그인 후 복사
<br/>
方法三
解决方法二问题。
<br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<br/>
function Universe(){
var instance;
Universe=function Universe(){
return instance ;
}
Universe.prototype=this; //保存原型属性
instance=new Universe();
instance.constructor=Universe;
instance.xx="xx";
}
로그인 후 복사
<br/>
方法四
自运行函数。
<br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
var Universe;
(function(){
var instance;
Universe=function Universe(){
if(instance){
return instance;
}
instance=this;
this.xx="xx";
}
})();
var uni = new Universe();
Universe.prototype.a = 1
var uni2 = new Universe();
console.log(uni === uni2) //true
console.log(uni.a) //1
console.log(uni2.a) //1
console.log(uni.constructor === Universe); //true
로그인 후 복사
<br/>
工厂模式
工厂模式是为了创建对象。
例子
公共构造函数 CarMaker
名为factory的CarMaker静态方法来创建car对象
<br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
var corolla=CarMaker.factory('compact');
var solstice=CarMaker.factory('convertible');
var cherokee=CarMaker.factory('suv');
corolla.drive() //I have 4 doors
solstice.drive() //I have 2 doors
cherokee.drive() //I have 6 doors
로그인 후 복사
<br/>
实现
<br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<br/>
<br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
function CarMaker() {}
CarMaker.prototype.drive = function() {
return "I have " + this.doors + " doors";
}
CarMaker.compact = function() {
this.doors = 4;
}
CarMaker.convertible = function() {
this.doors = 2
}
CarMaker.suv = function() {
this.doors = 6;
}
CarMaker.factory = function(type) {
if (typeof CarMaker[type] !== "function") {
throw "Error"
}
if (typeof CarMaker[type].prototype.drive !== "function") {
CarMaker[type].prototype = new CarMaker();
}
var newCar = new CarMaker[type]();
return newCar;
}
var corolla = CarMaker.factory('compact');
console.log(corolla.drive()); //I have 4 doors
function Player(name) {
this.points = 0;
this.name = name;
}
Player.prototype.play = function() {
this.points += 1;
mediator.played();
};
var scoreboard = {
element: "这里是获取的element用于展示分数",
update: function(score) { //更新分数
var msg;
for (var key in score) {
if (score.hasOwnProperty(key)) {
msg += score[key];
}
}
this.element.innerText = msg;
},
}
var mediator = {
players: {}, //玩家对象
setup: function() {
var players = this.players;
players.home = new Player("home");
players.guest = new Player('guest');
},
played: function() {
var players = this.players;
var score = {
home: players.home.points,
guest: players.guest.points
}
},
keypress: function(e) {
e = e || window.event;
if (e.which === 49) { //or keycode 对应按键 1
mediator.players.home.play();
return;
}
if (e.which === 48) { // 对应按键 0
mediator.player.guest.play();
return;
}
},
}
//运行
mediator.setup();
window.onkeypress = mediator.keypress;
setTimeout(function() { //设置30秒游戏时间
window.onkeypress = null;
alert("game end");
}, 30000);
로그인 후 복사
<br>
Observer Pattern
Observer 패턴은 자바스크립트에서 매우 널리 사용됩니다. 모든 브라우저 시간은 이 모드의 구현이며 node.js의 이벤트도 이 모드의 구현입니다. <br>이 모드의 또 다른 이름은 订阅/发布模式 입니다. <br>이 패턴을 설계한 이유는 느슨한 결합을 촉진하기 위한 것입니다. 이 패턴에서는 한 개체가 다른 개체의 메서드를 호출하는 대신 한 개체가 다른 개체의 <br>특정 활동을 구독하고 상태가 적용된 후 알림을 받습니다. 따라서 구독자는 관찰자가 되고, 관찰된 개체는 게시자 또는 주제가 됩니다. 중요한 이벤트가 발생하면 게시자는 모든 구독자에게 알리(전화)하고 이벤트 객체 형태로 메시지를 전달하는 경우가 많습니다. <br>
요약1. 싱글톤 모드클래스당 하나의 개체만 만듭니다. 2. 팩토리 패턴 문자열을 기반으로 지정된 유형을 기반으로 런타임에 객체를 생성하는 방법입니다. 3. 반복자 패턴 복잡한 사용자 정의 데이터 구조를 탐색하거나 작동하는 API를 제공합니다. 4. 데코레이터 패턴 미리 정의된 데코레이터 개체의 기능을 추가하여 런타임에 개체를 조정합니다. 5. 전략 패턴 특정 작업 인터페이스를 처리하기 위한 최상의 전략을 고수하는 동안에도 마찬가지입니다. 6. 모양 모드 일반적인 메소드를 새로운 메소드로 패키징하여 더욱 편리한 API를 제공합니다. 7. 프록시 패턴 은 개체를 래핑하여 개체에 대한 액세스를 제어합니다. 주요 방법은 위치를 임대료로 집계하거나
실제로 필요한 경우에만 액세스를 수행하고 높은 작업 오버헤드를 피하지 않는 것입니다. <br>
8. 터미네이터 패턴객체가 서로 직접 "대화"하는 것이 아니라 중개자를 통해 서로 통신하여
느슨한 결합을 형성합니다. <br>
9. 관찰자 패턴관측 가능한 객체를 생성하여 관심 있는 이벤트가 발생하면 모든 관찰자에게 시간을 통보할 수 있어 느슨한 결합을 형성할 수 있습니다.
위 내용은 JS 디자인 패턴에 대한 매우 상세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!