63
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Javasctiptデザインパターンで使えそうなものをまとめる

Last updated at Posted at 2017-10-12

はじめに

Javascriptのソースを綺麗に書くために、デザインパターンを学習しました。
その中で、使えそうなものをまとめました。
参考程度にしてください。

Javasctiptデザインパターン一覧

Javascriptのデザインパターンを紹介します。
13種類あります。

  1. コンストラクタ
  • モジュール
  • リビーリングモジュール
  • シングルトン
  • オブザーバ
  • メディエータ
  • プロトタイプ
  • コマンド
  • ファサード
  • ファクトリ
  • ミックスイン
  • デコレータ
  • フライウェイト

Javasctiptデザインパターンで使えそうなもの

1.コンストラクタ

オブジェクト指向言語で常用されているコンストラクタですが、
Javascriptはすべてがオブジェクトであるため、大いに使えるパターンです。

  • 一般的なコンストラクタ

例:表に1行追加する処理

javascript
function Table(table){
	this.table = table;

	this.addRow = function(){
		//処理
	};
}

function clickAddRowButton(){
	var table = document.getElementById('table');
	var tableInstance = new Table(table);
	tableInstance.addRow();
}
  • 問題点

addRowはTable型のインスタンスが作成されるたびに再定義されます。
Table型のすべてのインスタンスに共有されていることが理想です。

  • プロトタイプを使ったコンストラクタ

上記の問題点を解決する方法です。
Javascriptの関数にはプロトタイプというプロパティがあります。
コンストラクタで作成されたインスタンスは、コンストラクタのプロトタイプを利用可能になります。
そしてインスタンスすべてに共有されます。

javascript
function Table(table){
	this.table = table;
}

Table.prototype.addRow = function(){
	//処理
};

function clickAddRowButton(){
	var table = document.getElementById('table');
	var tableInstance = new Table(table);
	tableInstance.addRow();
}

2.モジュール

モジュールはコードを綺麗に分割し組織化するのに役立ちます。

例:表に1行追加する処理

javascript
var tableModule = {
	addRow : function(){
		//処理
	};
}

function clickAddRowButton(){
	tableModule.addRow();
}

3. シングルトン

シングルトンは、作成されるクラスのインスタンスが1つのみという考え方です。

Javascriptでの実用案を考えてみましたが、まったく浮かびませんでした。
シングルトンでサーバサイドの原子性を保つためのデザインパターンなので
フロントサイドはそこまで必要ないのかもしれません。

4. メディエータ

メディエータは仲介役です。
オブジェクト同士のやり取りを仲介することで、オブジェク同士を疎結合にします。
これにより保守性の高いソースを作ることができます。

詳しくはこちらを参照してください。
【JSでデザインパターン】メディエーター編

5. ファサード

大きく複雑なオブジェクト群を1まとまりにし、利用者にそれを意識させないデザインパターンです。
つまり、複数メソッドを1つにまとめたメソッドです。

例:表の行を追加・削除する処理

javascript
var facadeTableModule = (function(){
	var table;
	var _private = {
    set : function(table) {
    	this.table = table;
    },
    add : function(elements) {
    	//処理
    },
    remove :function(elements) {
    	//処理
    }
  };
  
  return {
  	facade : functoin(args){
    	_private.set(args.table);
      if(args.add){
      	_private.add(args.elements);
      }else if(args.remove){
      	_private.remove(args.elements);
      }
    }
  };
}()};

var table = document.getElementById('table');
var elements = document.getElementById('elements');

facadeTableModule.facade({table : table. add : true elements : elements});
facadeTableModule.facade({table : table. remove : true elements : elements});

参考リンク

63
68
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
63
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?