クラシックJavaScriptのデザインパターン - オブジェクト指向の6つの原則

ファイル

著者| Jesksonの
ソース|ダダフロントエンドビストロ

1

主な研究JavaScriptで6つの原則。だから、6つの原則はまだそれが何であるかを覚えていますか?6つの原則手段:単一責任原則(SRP)、オープン閉鎖原則(OCP)、リヒター置換原則(LSP)、依存性逆転原理(DIP)、インターフェース(ISP)の分離の原理、知識(LKP)の最小の原理。

単一責任の原則は
、原則としてオープン閉じ
リヒター置換原則
依存関係逆転の原則
インタフェースの分離の原則
原則の最小限の知識を

だから、義務の一つの原理は、それ何ですか?シングル責任原則は、英語の単語は、次のとおりです。単一責任がprincpleは、オブジェクトやメソッドに具現原則は一つだけです。

元非常にゆっくり旅行、手紙非常に遠く、人の人生を愛することだけで十分。(オブジェクトやメソッドを「立ち上がりが遅くなったら、車は、馬が、メールが遅い、あなたの人生はあなたが人々が理解し、ロックアップ、キーが絶妙な顔をしている、あまりにも格好良い元ロックを、人を愛すること」のみ一つのことを行います)

この方法は、多くの責任を負担した場合、それはニーズの変化の過程で起こった、この方法の可能性を書き換える必要が非常に充実しています。

クラスは一つだけの機能を提供する単一責任の原則は、あまりにも多くのクラスの変化を起こさない理由があります。調整を行うと、修理の男を行う必要がありますする必要があるときに正面から、二つの異なるタスク、タスク1、タスク2、タスク1の担当者は、タスク2の正常な動作に影響を与える可能性があり、タスク2は決してになります完全な。

単一責任の原則に従ってください、私たちは、タスクが変更を必要とするときにことを、二人はタスク2を実行するために、2人のタスク1を実行するためにタスク1、タスク2、1人をやっていたので、あること、それぞれ、起きてからこれをしませ解決することができますタスクのニーズは2を修正するために行われるとき、それは1人が、影響は発生しません持って、タスク2、同じトークンの通常の動作に影響を与えます。

リヒター置換原則:ベースクラスの場所へのすべての参照は、ゲームプレーヤーAと、そのサブクラスのオブジェクトを使用することができるようにする、それが移動Z1があり、今後の大きな動きのZ、その大に拡大し、Z1を拡張する動きを置きますサブクラスによって完全に新しい機能、新しい機能及びZからなる原Z1およびZ2からZトリック移動するのゲーマーBのゲーマーを見習い、このサブクラス見習いBは、この新しい機能Z2同じ時間に完了ゲーマー、それが可能です移動は、元Z1、エラーにつながった動きに影響を与えます。

(デメテルの法則:友達とのみ直接通信)、すべてのオブジェクトおよびその他のオブジェクトの関連カップリングは、限り、二つのオブジェクト間に結合されるように、2つのオブジェクト間の友人関係を言います。

2

などのオープンクローズ原則、クラス、メソッドは、その拡張子を開くその閉鎖の修正、前提の拡張機能の開発を変更せずに拡張されるべき発生し、新たなニーズがある場合、我々は既存のを拡張する方法することができます、オブジェクトが他のオブジェクトに達し、閉鎖変性、エンティティが変更を加えることができません。

この方法は、さまざまなコードの変更を実装することができ、既存の機能を変更しません。

// 定义一个方法
function da(x, y) {
 document.getElementById(x).style.color = y;
}

// 调用方法da
da('dashucoding', 'red');
// 开发封闭原则 -> 错误
// 定义方法
function da(x, y, z) {
 document.getElementById(x).style.color = y;
 document.getElementById(x).style.size = z;
}

// 调用方法da
da('dashucoding', 'red', '100px');
// 定义一个方法
function da(x, y) {
 document.getElementById(x).style.color = y;
}

// 不去动da这个方法
function dada(x, y, z) {
 da(x,y);
 document.getElementById(x).style.size = z;
}

// 正确使用开发封闭原则

function da(x, y) {
 document.getElementById(x).style.color = y;
}

da('dashucoding', 'red');

function dada(x, y, z) {
 da(x,y);
 document.getElementById(x).style.size = z;
}

dada('dashucoding', 'red', '100px');

シングル責任原則、プロフィールは、カテゴリに、それが唯一の変化の原因の一つでなければなりません。

オープンクローズ原則、プロファイルは、ソフトウェアエンティティの拡張子は開いているが、修正がオフになっています。これは、ソフトウェアエンティティの基礎を変更することなく、その機能を拡張するためにアップしています。

リヒターの置換原則、プロフィール、サブクラスは、その基本クラスを置き換えることができなければなりません。

依存関係反転原則、低レベルのモジュールに依存してはならないハイレベルのモジュールの導入は、彼らが抽象化に依存しなければなりません。要約は、特定の実装に依存してはならない、具体的な実装は、抽象的に依存しなければなりません。効果は、クライアントと実装モジュール間の結合を低減します。

統一されたインタフェースを交換するために、複数の専門的なインタフェースを用いた分離プロファイルのインタフェース原理、。

既存の機能を再利用の目的を達成するために、これらのオブジェクトを委任することによって、新しいオブジェクト;原則を多重の合成は、はじめに、新しいオブジェクトの一部になるために、新しいオブジェクトの内部には、いくつかの既存のオブジェクトを使用することです。これは、継承を使用しないようにしよう、の組み合わせを使用しようとすることは、単にです。

デメテル、プロフィールは、また、オブジェクトは見知らぬ人に話をしない、他のオブジェクトのほとんど理解として持っているべきであると、少なくとも知識の原則として知られています。

3

リヒターの置換原則は、原則的には、基底クラスとサブクラスの関係について話して閉じ補数を開発することです。リヒター置換原理を理解することの最も古典的な例は、「ダチョウない鳥」、「正方形は長方形である」であるというように、四角形を取得するために、数学の授業、我々が知っている、正方形は長方形である、それは長さと幅に等しく、それを見ることができる長方形は、正方形、長方形から継承させるべきです。

ファイル

public class Rectangle {
 private int height;
 private int width;
 
 // 省略getter setter
}

// 正方形长和宽始终一样 覆写
public class Square extends Rectangle {
 @Override
 public void setWidth(int width) {
  super.setWidth(width);
  super.setHeight(width);
 }
 
 @Override
 public void setHeight(int height) {
  super.setWidth(height);
  super.setHeight(height);
 }
}
public class Test {
 public static void main(String[] args) {
  Test test = new Test();
   Rectangle rectangle = new Rectangle();
   rectangle.setHeight(5);
   rectangle.setWidth(4);
   test.zoom(rectangle, 2, 3);
   
   Square square = new Square();
   square.setHeight(5);
   square.setWidth(4);
   test.zoom(square, 2, 3);
 }
 
 public void zoom(Rectangle rectangle, int width, int height) {
  rectangle.setWidth(rectangle.getWidth() + width);
  rectangle.setHeight(rectangle.getHeight() + height);
 }
}

依存関係逆転の原則は、高レベルのモジュールは、抽象的に依存すべき低レベルのモジュールに依存してはいけません。要約は、特定の実装に依存してはならない、具体的な実装は、抽象的に依存しなければなりません。

ファイル

ファイル

ハイレベルのブロック方向依存階層モジュール、モジュールは、低レベルのモジュールのレベルに依存します。高レベルと低レベルの相互依存しない、すべての変更は、低レベル、高レベルのモジュールに影響します。特定の実装の抽象化レイヤに依存して抽象化レイヤ、上級レベル、実装レベル、。

インターフェイス分離の原則、それはクライアントに依存すべきではないインタフェースを必要としない、別のクラスに依存したクラスは、最小のインターフェイスに基づいている必要があります。あなたはどのように言うのですか?

A、Bは、Cが大きくインターフェースに依存している3つのクライアントがありますが、大きなインターフェースはA()、B()、C()があるが、唯一のA A必要なクライアント()だけで、他ではありません、あなたが分離の原則を利用する際に、クライアントはそう)、クライアントのニーズのみC C(こと、のみA()ので、クライアントのニーズのみB B(つまり)が必要インターフェイスします。

設計原理は、指導思想である、イデオロギー的なデザインモードもこれらの原則を遵守しているので、デザインパターンは、達成するための手段である、プログラミング、正しい方向に私たちを与えます。高凝集性と低い結合、高度に重合された内部モジュールに高い凝集度、モジュールの内部との間の関係に達し、下部結合はできるだけ低いのように、モジュールとモジュールの間の結合、モジュールとモジュールとの間の関係であることを特徴とします。

シングル責任原則の概要:オブジェクト一つだけ。

オープンクローズ原理の概要:拡張のためのオープン、修正のため閉鎖。

また、少なくとも知識の要約の原則として知られているデメテル、:オブジェクトが他のオブジェクトの最小理解しておく必要があります。

デザインパターンと中間パターンの見えモデルはデメテルの応用の一例です。

ディミトリス方法は、ただの友達と話すこと、シンプルで、見知らぬ人に話すことはありません。欠点は、システムが小規模な方法の多くを生成することです。

原則として、組み合わせの使用、より少ない相続を多重化の合成。継承はオブジェクト指向の3の特徴である、欠陥によってカプセル化、継承、ポリモーフィズム、継承、シンプルで拡張することは容易でなく、連続は、親クラスとなり、サブクラスを変更する必要があり、継承されたブレークカプセル化、親クラスでありますその実装はサブクラスに透明であり、継承の関係が強く結合されています。

変数親クラス、サブクラスは変更する必要があります。継承されたブレークカプセル化(サブクラスは親パッケージサブクラスの破壊が生じ、親クラスの変化によるカプセル化されている)、サブクラスのために、親クラスを継承することにより、全くありません安全性とセキュリティ、親がその内容を変更し、それが機能的に破壊サブクラスをリードします。親クラスは、サブクラスのメソッドを書き換え、親クラスを継承し、親クラスは、任意の変更ではありません。

デザインの原則:

シングル責任の原則、方法一つだけ;リヒター置換原則、サブクラスは親を置き換えることができ、依存関係逆転の原則、唯一のインタフェース方式に依存しているに依存しない、基本的な実装方法を気にしない、インターフェイスの分離の原則、大規模なインタフェース小さなインターフェースに分割;デメテルは、関数パラメータを可能として渡された、閉鎖原理を開き、拡張のためのオープン、修正のため閉鎖。

5

単一原理機能、利点:デューティを変更する必要がある場合、より小さな単位にオブジェクトへの単一責任の原則に従い、単一のクラスまたはオブジェクトの複雑さを低減するコードの再利用を容易にするだけでなく、ユニットテストに資します、それは他の業務に影響を与えません。短所:オブジェクト間の関連付けの難しさを向上させながら、コーディングの複雑さを増します。

異なるクラスのためのさまざまな責任を理解します。唯一のクラスが責任を負うものとします。

最小知識原理、利点:オブジェクト間の結合度を低減または排除する、増加の再利用。短所:オブジェクトまたはパッケージは、2つの間の関係を処理するために、サードパーティのオブジェクトの導入で、時には第三者オブジェクトが複雑で、それを維持することが困難であることを複雑になることがあります。

オープンクローズ原理、利点:それは保守が容易に分離した後に変更することができますプログラムの安定性が高いです。

// 单一职责原则
// 类
public class People {
 public void work() {
  System.out.println("work");
 }
 public void eat() {
  System.out.println("eat");
 }
 public void play() {
  System.out.println("play");
 }
}
// 一个类, 三个职责
// 单一职责原则
public interface workInter {
 public void work();
}
public interface eatInter {
 public void eat();
}
public interface playInter {
 public void play();
}
// 继承接口
public class People implements workInter, eatInter, playInter {
 public void work() {
  System.out.println("work");
 }
 public void eat() {
  System.out.println("eat");
 }
 public void play() {
  System.out.println("play");
 }
}
public class Test {
 public static void main(String args[]) {
  People people = new People();
  workInter worker = new People();
  worker.work();
  
  eatInter eater = new People();
  eater.eat();
  
  playInter player = new People();
  player.play();
 }
}

どこ親クラスが表示されリヒター置換原理は、基底クラスへの参照は、透過的にその子クラスのオブジェクトを使用することができる必要があり、サブクラスは完全に、親クラスの機能を実現しなければならない、サブクラスを置き換える問題ありません。

犬は動物のサブクラスであるため、リヒターの置換原則は、私は動物のように、私は、犬を愛しなければならない。しかし、私は、私は他のほとんどの小さな動物好きではないので、私は犬のように、動物のように私を言うことはできないと述べました。

サブクラスが完全に満たされていない例のために、親クラスの機能を実現する必要があります。

// 父类
public abstract class Father {
 // work
 public abstract void work();
}
// 子类
public class Child extends Father {
 @Override
 public void work() {
  // 实现了这个方法,但功能不实现,什么都不做
 }
}

依存性逆転原理は、インターフェースの使用として理解または抽象クラスです。モジュール間の依存関係は、抽象を介して行われ、クラス間の関係実現に直接依存しない、クラスが依存する抽象クラスインターフェースまたは生成抽象クラスインターフェースまたは実装依存型によって達成され、それが実装クラスに依存しますインタフェースまたは抽象クラスです。

public class Da {
 private Dada dada = null;
 public Da(Dada dada) {
  this.da = da;
 }
}

public interface DaInter {
 public void setDa(Dada dada);
}

public class Da implements DaInter {
 private Dada dada = null;
 public void setDA(Dada dada) {
  this.da = da;
 }
}

クラスがインタフェースを実装していますが、このインタフェースは、そのメソッドは、あなたがこのインターフェイスを分割する必要は、ないている場合はインターフェイスの棲み分け原理は、この方法は、それが実装するクラスに新しい独立した界面を形成する必要があります。

シングルトン:クラスの唯一のインスタンスが、現在のインスタンスを介して作成されているかどうかを区別するために変数を使用します

// 一个参数,一个变量
var da = function (name) {
 this.name = name;
 this.instance = null;
}
da.prototype.getName = function() {
 alert(this.name)
}
da.getInstance = fucntion(name) {
 if(!this.instance) {
  this.instance = da(name);
 }
 return this.instance;
}

推奨読書

1、あなたは、これは、新しい、バインド、呼び出し、どのくらい適用されます知っていますか?私はあなたを教えて

それはコアであるため、JavaScriptを学ぶため2、なぜデザインパターン

3、JavaScriptの閉鎖や高度な機能へとあなたを取るの記事

素人の言語の知識メーカー4は、HRのインタビューES6で質問に直面しています

5、JavaScriptの技術スタックとは、継承するプロトタイプチェーンを通してあなたを取ります

フロントエンドに関与している記事の現在の内容にあなたが従うことが興味を持っている場合、PHPの知識は、非常に光栄、あなたが本当に何を英国の識別見つけることができます!また、静かに私を支援して期待して、数日中にご清聴ありがとうございました、私はより良い作品を書くことを試みます。私たちは一緒に成長、ジュニアパートナーにゼロベースのプログラミング、ユーザーフレンドリーなフロントエンドWebプレゼンテーションエリア、データ構造とアルゴリズム、ネットワーク理論などから学びます。共有Webフロントエンド関連の技術資料、ツール、リソース、コース選択、ホットな情報。


ローカルコンテンツのこの数はビットを取得しない場合(例:著作権やその他の問題に)、タイムリーにすることができ整流のための私達に連絡し、最初の時間に処理されますしてください。


親指アップしてください!あなたが同意しているので/励ましは、私の文章の最大の力です!

ようこそ注意ダダさんCSDN!

これは、品質、態度のブログです

7d927f18ebd05ea1d505a572393fbc87.jpg

おすすめ

転載: www.cnblogs.com/dashucoding/p/11897006.html