多重化原理(コンポジット/骨再利用原理、CARP)の合成ではなく、ソフトウェアの再利用の継承の目的のため、可能な物体組成物(HAS-A)/重合(contanis-A)を指します。あなたは、クラスとクラス間の結合を低減するために、システムをより柔軟にすることができ、他のクラスのクラスの影響で比較的小さな変化が生じました。私たちの継承は、実装の詳細の全てに相当し、ホワイトボックスの再利用は、サブクラスにさらされていると呼ばれています。また、ブラックボックスとして知られている合成/重合多重化されたオブジェクトは、クラスの実装の詳細を外部からアクセスすることができません。特定のビジネス・シナリオに基づいてコードの設計を行うには、実際には、我々はOOPモデルに従う必要があります。あるいは、データベース操作中に、例えば、最初のDBConnectionカテゴリを作成します。
public class DBConnection {
public String getConnection(){
return "MySQL 数据库连接";
}
}
ProductDaoカテゴリを作成:
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は抽象化ではなく、簡単にシステムの拡張ではありません。現在のシステムは、ビジネスの変化、データベース操作は、Oracleデータベース層を支持することを想定し、MySQLデータベースの接続をサポートしています。もちろん、我々は中のDBConnectionでのOracleデータベースメソッドのサポートを追加することができます。しかし、開閉の原則に反します。実際には、我々はコードダオを変更する必要はありません、のDBConnectionはコードを見て、抽象を変更します:
public abstract class DBConnection {
public abstract String getConnection();
}
その後、ロジックは、MySQLを引っ張っ:
public class MySQLConnection extends DBConnection {
@Override
public String getConnection() {
return "MySQL 数据库连接";
}
}
Oracleは、論理の支援を再作成します。
public class OracleConnection extends DBConnection {
@Override
public String getConnection() {
return "Oracle 数据库连接";
}
}
アプリケーション層への特定の選択は、クラス図を見て:
概要
基本的なデザインパターンを学習し、設計原理を学びます。実際の開発プロセスでは、必ずしもすべてのコードは、設計原理に従うことを要求していない、我々は適切な場面での設計原則に従うことが、人材、時間、コスト、品質、ない完璧の故意追求を考慮する必要があり、トレードオフのようなものを体現、私たちは、よりエレガントなコードの構造を設計するのに役立ちます。