デザインパターン - 7つの設計原則(4) - 多重化原則の合成と設計原理の概要

アウトライン

簡単な7つの設計原理:

  1. 開閉原則:すべてのコアオブジェクト指向設計、拡張のためのオープンは、変更のため閉鎖することを
  2. 依存性逆転原理:抽象に依存プログラミングインタフェースについてはなく特定に依存
  3. シングル責任原則:インターフェイスは、クラスの変更の唯一の原因の一つのための唯一の責任があります
  4. インターフェイス分離原則:複数の専門的なインタフェースを使用する代わりに、総インターフェイスを使用して
  5. デメテル(少なくとも既知の原則):唯一の友達(メンバ変数、メソッド、入力および出力パラメータ)と通信し、アクセス修飾子を制御し、見知らぬ人に話をしません
  6. リヒター置換原則:サブクラスは親クラスの機能を拡張することができますが、親クラスの本来の機能を変更することはできません
  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 数据库连接";
    }
}

アプリケーション層への特定の選択は、クラス図を見て:


設計原理の概要

基本的なデザインパターンを学習し、設計原理を学びます。実際の開発プロセスでは、必ずしもすべてのコードは、設計原理に従うことを要求していない、我々は適切な場面での設計原則に従うことが、人材、時間、コスト、品質、ない完璧の故意追求を考慮する必要があり、トレードオフのようなものを体現、私たちは、よりエレガントなコードの構造を設計するのに役立ちます。

おすすめ

転載: www.cnblogs.com/eamonzzz/p/11595602.html