ソフトウェア設計の七大原則:(七)合成多重原則

9465 ワード

一、合成多重化の原則概要
  • 定義:関係を継承するのではなく、オブジェクトの組合せ/集約をできるだけ使用してソフトウェア多重化の目的を達成します.
  • has−Aおよび組合せcontains−Aを重合する.
  • の利点:システムをより柔軟にし、クラスとクラスの結合度を低減することができ、1つの雷の変化が他のクラスに与える影響は相対的に少ない.

  • 二、合成(組合せ)/重合多重化の原則
  • いつ合成/集約、継承を使用しますか?
  • 重合has-A、コンビネーションcontains-A、継承is-A
  • 二、コード実装
    注意:以下は、サンプルとして使用される疑似コードです.
    1.複数のデータベース接続クラスがある場合、どのように拡張しますか?
    public class DBConnection {
        public String getConnection() {
            return "MySQL     ";
        }
    }
    
    public class ProductDao extends DBConnection{
    
        public void addProduct(){
            String conn=super.getConnection();
            System.out.println("  "+conn+"    ");
        }
    }
    
    public class CompositionAggregationTest {
        public static void main(String[] args) {
            ProductDao productDao = new ProductDao();
            productDao.addProduct();
        }
    }
    

    2.複数のクラス接続時の拡張実装
    public  abstract class DBConnection {
        public abstract String getConnection();
    }
    
    public class MySQLConnection extends DBConnection{
        @Override
        public String getConnection() {
            return "MySQL     ";
        }
    }
    
    public class PostgreSQLConnection extends DBConnection{
        @Override
        public String getConnection() {
            return "PostgreSQL     ";
        }
    }
    
    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 + "    ");
        }
    }
    
    public class CompositionAggregationTest {
        public static void main(String[] args) {
            ProductDao productDao = new ProductDao();
            productDao.setDbConnection(new PostgreSQLConnection());
            productDao.addProduct();
        }
    }
    

    三、合成多重化の原則に対する理解
    /**
    *           ,              ,    ,  ,               ,
    *             ,            ,                。
    */