ホームページ ウェブフロントエンド jsチュートリアル オブジェクト指向設計パターンの基本ルール_JavaScriptスキル

オブジェクト指向設計パターンの基本ルール_JavaScriptスキル

May 16, 2016 pm 05:16 PM
デザインパターン オブジェクト指向

1. 单一职责

就一个类而言,应该仅有一个引起它变化的原因。
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏。
软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离。如果你多于一个动机去改变一个类,那么这个类就具有多于一个的职责。

2. 开放封闭

软件实体(类,模块,函数等)应该可以扩展,但是不可修改。也就是说,对于扩展是开放的,对于更改是封闭的。
如此设计,面对需求的改变可以保持相对的稳定,从而使系统可以在第一个版本以后不断的推出新的版本。
无论模块是多么的'封闭',都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。
等到变化发生时立即采取行动。

在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
我们希望的是在开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。
开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都可以的进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。

3. 依赖倒转

高层模块不应该依赖底层模块。两个都应该依赖抽象。
抽象不应该依赖细节,细节应该依赖抽象。
抽象不应该依赖细节,细节应该依赖于抽象,针对接口编程,不要对实现编程。
依赖倒转其实可以说是面向对象设计的标志,用哪种语言来写程序并不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程, 即程序中所有的依赖关系都终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。

4. 里氏代换

一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且察觉不出父类对象与子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。
子类型必须能用替换掉它们的父类型。
只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

5. 合成/聚合复用

尽量使用合成/聚合,尽量不要使用类继承。
优先使用对象的合成/聚合将有助于你保持每个类被封装并被集中在单个任务上,这样累和类继承层次会保持较小的规模,并且不大可能增长为不可控制的庞然大物。

6. 迪米特法则

如果两个类不必彼此直接通信,那么着两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。
迪米特法则其根本思想是强调了类之间的松耦合。

类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

辅助资料:

常用创建型设计模式(其他类型模式就不提了,自己看书)

创建型模式隐藏了这些类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建型模式在创建了什么、谁创建它=它是怎么被创建的,以及何时创建这些方面提供了很大的灵活性。

1. 工厂方法模式(Factory Method)

オブジェクトを作成するためのインターフェイスを定義し、どのクラスをインスタンス化するかをサブクラスに決定させます。ファクトリ パターンは、クラスのサブクラスへのインスタンス化を遅らせます。
作成パターンは、インスタンス化のプロセスを抽象化し、システムがオブジェクトの作成、構成、表現の方法に依存しないようにします。作成パターンは、システムが使用する特定のクラスに関する情報をカプセル化します。顧客は、構造と機能が大きく異なる「製品」オブジェクトを使用してシステムを構成できます。構成は静的、つまりコンパイル時に指定することも、動的、つまり実行時に指定することもできます。
通常、デザインはファクトリーメソッドから開始する必要がありますが、デザイナーがより高い柔軟性が必要であると判断した場合、デザインは他の作成パターンに進化します。複数の作成パターンを理解すると、設計基準間でトレードオフを行う際に、設計者により多くの選択肢が与えられます。

2. 抽象ファクトリーパターン (Abstract Factory)

特定のクラスを指定せずに、一連のまたは関連する依存オブジェクトを作成するためのインターフェイスを提供します。

3. ビルダーモード (ビルダー)

複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。
凝集度と結合 凝集度は、ルーチンの内部コンポーネントがどの程度緊密に相互接続されているかを表します。結合は、ルーチンが他のルーチンとどの程度緊密に接続されているかを表します。ソフトウェア開発の目標は、内部で完全なルーチン、つまり凝集性が高く、他のルーチンとの接続が小さく、直接的で、可視的で柔軟なルーチン、つまり疎結合であるルーチンを作成することです。
複雑なオブジェクトの構築をその表現から分離することで、製品の内部表現を簡単に変更できるようになり、構築コードをプレゼンテーション コードから分離することができます。このように、お客様は製品の作成プロセスを気にする必要はありませんが、必要なものを私に教えていただければ、同じ構築プロセスを使用してお客様向けに異なる製品を作成できます。

4. プロトタイプ

プロトタイプのインスタンスを使用して作成するオブジェクトのタイプを指定し、これらのプロトタイプをコピーして新しいオブジェクトを作成します。
多数の依存プロトタイプを作成してクローンを作成する方が、適切な状態のクラスを毎回手動でインスタンス化するよりも便利なことがよくあります。

5. シングルトン

クラスにはインスタンスが 1 つだけあることを保証し、そのインスタンスへのグローバル アクセス ポイントを提供します。
一部のクラスでは、インスタンスが非常に重要です。グローバル変数を使用すると、オブジェクトにアクセスできますが、クライアントが複数のオブジェクトをインスタンス化することは妨げられません。シングルトンの利点は、クラス自体がその唯一のインスタンスを保存する責任を負うことです。このクラスは、他のインスタンスを作成できないことを保証し、シングルトンはインスタンスにアクセスするメソッドも提供します。これにより、クライアントがいつどのようにアクセスするかについて、一意のインスタンスを厳密に制御できます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP の高度な機能: オブジェクト指向プログラミングのベスト プラクティス PHP の高度な機能: オブジェクト指向プログラミングのベスト プラクティス Jun 05, 2024 pm 09:39 PM

PHP における OOP のベスト プラクティスには、命名規則、インターフェイスと抽象クラス、継承とポリモーフィズム、依存関係の注入が含まれます。実際のケースには、ウェアハウス モードを使用してデータを管理する場合や、ストラテジー モードを使用して並べ替えを実装する場合などがあります。

Java フレームワークにおけるデザイン パターンとアーキテクチャ パターンの違い Java フレームワークにおけるデザイン パターンとアーキテクチャ パターンの違い Jun 02, 2024 pm 12:59 PM

Java フレームワークにおけるデザイン パターンとアーキテクチャ パターンの違いは、デザイン パターンがソフトウェア設計における一般的な問題に対する抽象的な解決策を定義し、ファクトリ パターンなどのクラスとオブジェクト間の相互作用に焦点を当てていることです。アーキテクチャ パターンは、階層化アーキテクチャなどのシステム コンポーネントの編成と相互作用に焦点を当てて、システム構造とモジュールの間の関係を定義します。

PHP オブジェクト指向プログラミングの深い理解: オブジェクト指向プログラミングのデバッグ手法 PHP オブジェクト指向プログラミングの深い理解: オブジェクト指向プログラミングのデバッグ手法 Jun 05, 2024 pm 08:50 PM

オブジェクトのステータスの追跡、ブレークポイントの設定、例外の追跡を習得し、xdebug 拡張機能を利用することで、PHP オブジェクト指向プログラミング コードを効果的にデバッグできます。 1. オブジェクトのステータスを追跡する: var_dump() と print_r() を使用して、オブジェクトの属性とメソッドの値を表示します。 2. ブレークポイントの設定: 開発環境にブレークポイントを設定すると、実行がブレークポイントに到達するとデバッガが一時停止するため、オブジェクトのステータスを簡単に確認できます。 3. 例外のトレース: try-catch ブロックと getTraceAsString() を使用して、例外発生時のスタック トレースとメッセージを取得します。 4. デバッガーを使用します。xdebug_var_dump() 関数は、コードの実行中に変数の内容を検査できます。

Java デザイン パターンにおけるデコレータ パターンの分析 Java デザイン パターンにおけるデコレータ パターンの分析 May 09, 2024 pm 03:12 PM

デコレータ パターンは、元のクラスを変更せずにオブジェクトの機能を動的に追加できる構造設計パターンです。抽象コンポーネント、具象コンポーネント、抽象デコレータ、具象デコレータの連携によって実装され、ニーズの変化に合わせてクラス機能を柔軟に拡張できます。この例では、ミルクとモカのデコレーターが総額 2.29 ドルで Espresso に追加されており、オブジェクトの動作を動的に変更するデコレーター パターンの力を示しています。

PHP デザイン パターン: テスト駆動開発の実践 PHP デザイン パターン: テスト駆動開発の実践 Jun 03, 2024 pm 02:14 PM

TDD は、高品質の PHP コードを作成するために使用されます。その手順には、テスト ケースを作成し、期待される機能を記述し、テスト ケースを失敗させることが含まれます。過度な最適化や詳細な設計を行わずに、テスト ケースのみが通過するようにコードを記述します。テスト ケースが合格したら、コードを最適化およびリファクタリングして、可読性、保守性、およびスケーラビリティを向上させます。

Guice フレームワークでのデザイン パターンの適用 Guice フレームワークでのデザイン パターンの適用 Jun 02, 2024 pm 10:49 PM

Guice フレームワークは、次のような多くの設計パターンを適用します。 シングルトン パターン: @Singleton アノテーションによってクラスのインスタンスが 1 つだけであることを保証します。ファクトリ メソッド パターン: @Provides アノテーションを使用してファクトリ メソッドを作成し、依存関係の注入中にオブジェクト インスタンスを取得します。戦略モード: アルゴリズムをさまざまな戦略クラスにカプセル化し、@Named アノテーションを通じて特定の戦略を指定します。

Spring MVCフレームワークでのデザインパターンの適用 Spring MVCフレームワークでのデザインパターンの適用 Jun 02, 2024 am 10:35 AM

SpringMVC フレームワークは次の設計パターンを使用します: 1. シングルトン モード: Spring コンテナーを管理します。 2. ファサード モード: コントローラー、ビュー、およびモデルの対話を調整します。 3. ストラテジ モード: リクエストに基づいてリクエスト ハンドラーを選択します。 : アプリケーション イベントを公開し、リッスンします。これらの設計パターンは SpringMVC の機能と柔軟性を強化し、開発者が効率的で保守可能なアプリケーションを作成できるようにします。

Java フレームワークでデザイン パターンを使用する利点と欠点は何ですか? Java フレームワークでデザイン パターンを使用する利点と欠点は何ですか? Jun 01, 2024 pm 02:13 PM

Java フレームワークでデザイン パターンを使用する利点には、コードの可読性、保守性、拡張性の向上が含まれます。欠点としては、複雑さ、パフォーマンスのオーバーヘッド、使いすぎによる学習曲線の急上昇などが挙げられます。実際のケース: プロキシ モードはオブジェクトの遅延読み込みに使用されます。デザイン パターンを賢く使用して、その利点を活用し、欠点を最小限に抑えます。

See all articles