Javaのコンポジションの例

Javaにおけるコンポジションは、クラス間のhas-a関係を実装するための設計手法です。コードの再利用のために、Javaの継承またはオブジェクトのコンポジションを使用できます。

Javaにおけるコンポジション

Javaのコンポジションは、他のオブジェクトを参照するインスタンス変数を使用して実現されます。例えば、PersonJobを持っています。これをJavaのコンポジションの例として見てみましょう。

Javaのコンポジションの例

package com.journaldev.composition;

public class Job {
    private String role;
    private long salary;
    private int id;
        
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
    public long getSalary() {
        return salary;
    }
    public void setSalary(long salary) {
        this.salary = salary;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    
    
}
package com.journaldev.composition;

public class Person {

    //コンポジション has-a 関係
    private Job job;
   
    public Person(){
        this.job=new Job();
        job.setSalary(1000L);
    }
    public long getSalary() {
        return job.getSalary();
    }

}

以下は、人物オブジェクトを使用してその給与を取得するJavaのコンポジションの例のテストクラスです。

package com.journaldev.composition;

public class TestPerson {

    public static void main(String[] args) {
        Person person = new Person();
        long salary = person.getSalary();
    }

}

Javaのコンポジションの利点

上記のJavaでの合成のテストプログラムに注意してください。このプログラムは、Jobオブジェクトの変更に影響を受けません。コードの再利用と2つのクラスの関係がhas-aである場合は、継承よりも合成を使用する必要があります。Javaで合成を使用する利点は、他のオブジェクトの可視性をクライアントクラスに制御し、必要なものだけを再利用できることです。また、他のクラスの実装に変更がある場合、例えばgetSalaryがStringを返す場合、Personクラスを変更する必要がありますが、クライアントクラスは変更する必要はありません。合成を使用すると、バックエンドクラスの作成が必要な場合に作成できます。例えば、必要な時にJobオブジェクトを実行時に初期化することができます。さらに読む:Javaプログラミングのベストプラクティスの1つは、継承よりも合成を使用することです。詳細な分析については、この投稿をチェックしてください:Composition vs Inheritance

Java Composition Youtube Video

最近、Javaにおけるコンポジションを詳細に説明するYouTubeビデオを作成しました。以下のリンクからご覧ください。https://www.youtube.com/watch?v=VfTiLE3RZdsこれでJavaにおけるコンポジションやJavaのコンポジションの例に関する説明は以上です。アプリケーションのクラスを設計する際に、有益な判断をする際に役立つと思います。参考文献:Wikipediaのページ

Source:
https://www.digitalocean.com/community/tutorials/composition-in-java-example