アウトライン
簡単な7つの設計原理:
- 開閉原則:すべてのコアオブジェクト指向設計、拡張のためのオープンは、変更のため閉鎖することを
- 依存性逆転原理:抽象に依存プログラミングインタフェースについてはなく特定に依存
- シングル責任原則:インターフェイスは、クラスの変更の唯一の原因の一つのための唯一の責任があります
- インターフェイス分離原則:複数の専門的なインタフェースを使用する代わりに、総インターフェイスを使用して
- デメテル(少なくとも既知の原則):唯一の友達(メンバ変数、メソッド、入力および出力パラメータ)と通信し、アクセス修飾子を制御し、見知らぬ人に話をしません
- リヒター置換原則:サブクラスは親クラスの機能を拡張することができますが、親クラスの本来の機能を変更することはできません
- 合成多重原理可能オブジェクト組成物の目的は、/重合(contanis-A)(A-Aを有する)が、ソフトウェアの再利用の継承に達していません。
多重化原則の合成
定義
多重化原理(コンポジット/骨再利用原理、CARP)の合成ではなく、ソフトウェアの再利用の継承の目的のため、可能な物体組成物(HAS-A)/重合(contanis-A)を指します。あなたは、クラスとクラス間の結合を低減するために、システムをより柔軟にすることができ、他のクラスのクラスの影響で比較的小さな変化が生じました。
私たちの継承は、実装の詳細の全てに相当し、ホワイトボックスの再利用は、サブクラスにさらされていると呼ばれています。また、ブラックボックスとして知られている合成/重合多重化されたオブジェクトは、クラスの実装の詳細を外部からアクセスすることができません。特定のビジネス・シナリオに基づいてコードの設計を行うには、実際には、我々はOOPモデルに従う必要があります。
例
あるいは、データベース操作中に、例えば、最初に作成しDBConnection
たクラスを:
/**
* @author eamon.zhang
* @date 2019-09-26 上午10:42
*/
public class DBConnection {
public String getConnection() {
return "MySQL 数据库连接";
}
}
作成ProductDao
カテゴリ:
/**
* @author eamon.zhang
* @date 2019-09-26 上午10:43
*/
public class ProductDao {
private DBConnection dbConnection;
public void setDbConnection(DBConnection dbConnection) {
this.dbConnection = dbConnection;
}
public void addProduct() {
String conn = dbConnection.getConnection();
System.out.println("使用" + conn + "增加产品");
}
}
これは非常に典型的な合成多重化原則のシナリオです。しかし、現在の設計は、それがDBConnection
抽象化ではなく、簡単にシステムの拡張ではありません。システムは、現在サポートしているMySQL
の操作をサポートするために、データベース層をビジネスの変化を想定し、データベース接続をOracle
データベースに。もちろん、我々はできるDBConnection
増加Oracle
データベースサポートされているメソッドを。しかし、開閉の原則に反します。実際には、我々は変更する必要はありませんDao
コードがされるDBConnection
に改訂されたabstract
コードを見て、:
/**
* @author eamon.zhang
* @date 2019-09-26 上午10:42
*/
public abstract class DBConnection {
public abstract String getConnection();
}
その後、MySQL
ロジックが引か:
/**
* @author eamon.zhang
* @date 2019-09-26 上午10:46
*/
public class MySQLConnection extends DBConnection {
@Override
public String getConnection() {
return "MySQL 数据库连接";
}
}
次に、作成Oracle
の論理的な支援を:
/**
* @author eamon.zhang
* @date 2019-09-26 上午10:47
*/
public class OracleConnection extends DBConnection {
@Override
public String getConnection() {
return "Oracle 数据库连接";
}
}
アプリケーション層への特定の選択は、クラス図を見て:
設計原理の概要
基本的なデザインパターンを学習し、設計原理を学びます。実際の開発プロセスでは、必ずしもすべてのコードは、設計原理に従うことを要求していない、我々は適切な場面での設計原則に従うことが、人材、時間、コスト、品質、ない完璧の故意追求を考慮する必要があり、トレードオフのようなものを体現、私たちは、よりエレガントなコードの構造を設計するのに役立ちます。