[TIL]マルチフォーム

2486 ワード

1)再利用の実現方法


1-1)サブクラスとして実装する方法(overrideを使用)


  • 個体数が徐々に増加するという問題がある.

  • 補足内容のみなので個体数を増やす必要はありません.
  • 1-2)コードの挿入方法



  • 様々な形式のコードを真ん中に挿入します.

  • これを多形性と呼ぶ.

  • これらのコードを結合する方法で変更します.

  • 異なるコードを結合することを約束し、約束の部分でこれらのコードを結合します.
  • 2)コネクタ


    2-1)インタフェースを使用するメリット



  • インタフェースを定義すれば、私は~をすることができます.

  • 大きな違いがあるかもしれませんが、私の専門性が悪いので、他のメーカーを使ってもいいです.

  • インタフェース関数を作成するのも同じです!定義しただけでお任せします.

  • インタフェースの形式で各種のコードの形式を結合します!
  • 2-2)インタフェースの例

    public class ExamConsole {
    
    	private ConsoleListener listener;
    	
  • ここでの資料フォーマットは個体形式ではなく、所定の名前(インタフェース)をフォーマット名とする.
  • public void print(){
    	...
        onPrint();
        	...
    }
    
    public void Input() {
    	...
        onInput();
        	...
    }
  • 以降、ConsoleListenerというインタフェースが作成される.
  • public interface ConsoleListener {
    	void onPrint();
        void onInput();
    }
    約束した
  • を最後に、製品を完成させることができます.
  • プログラムクラス

    public static void main(String[] args) {
    
        NewlecExam exam = new NewlecExam();
        ExamConsole console = new ExamConsole();
        console.setExam(exam);
        console.setListener(?);
        
        console.input();
        console.print();
        }
    }

    コンセプト検証の問題

  • Aクラスを定義し、Bクラスをisとし、Cタイプのオブジェクトcを継承します.
    (ただし、Cオブジェクトは構成関係によって継承されます.)
  • public class A extends B{
    	private C c;
    
    	public A(){
    	c= new C();
    	}
    }
    関連関係としてMissile形式のオブジェクトミサイルを含む
  • (1)Fighterというクラスを作成し、統合時にSetter Injectionメソッドを使用します.
    (2)Fighterクラスとmove()、fire()の機能が異なる飛行機は、moveItemクラスとして抽象化してください.
    (3)MoveItem抽象クラスを定義し,ここでmove()メソッド,fire()メソッドを抽象メソッドとして作成し,コードを作成して継承して上書きする.
  • public class Fighter extends MoveItem {
    
    	private Missile missile;
    
    	public void setMissile(Missile missile){
    		this.missile = missile;
    	}
    
    	public move() {
    		return move;
    	}
    
    	public fire() {
    		return fire;
    	}
    
    
    }
    
    public abstract class MoveItem {
    
    	protected abstract void move();
    
    	protected abstract void fire();
    }