0
0

委譲

Last updated at Posted at 2024-05-04

はじめに

委譲についてまとめる

委譲とは

再利用したい機能を持つオブジェクトを、現在のクラスのプロパティとして取り込む。
継承はis-aの関係であるが、委譲はhas-aの関係であると言える。

参考コード1

fileプロパティにSqlFileObjectオブジェクトを保持(has)し、必要に応じてそこから既成のメソッドを利用する。

delegate_basic.php
class fileLogger {
    private DateTime $current;
    private SqlFileObject $file;

    public function __construct(string $logname) {
        $this->current = new DateTime();
        $this->file = new SqlFileObject("{$logname}-{$this->current->format('Ymd')}.log", 'a');
    }

    public function fwrite(string $str) {
        $this->file->fwrite("[{$this->current->format('Y/m/d')}]{$str}¥n");
    }

    $logger = new fileLogger('log');
    $logger->fwrite('HogeHoge Text');
}

委譲の良いところ

クラス同士の関係が緩まるところ。利用しているのがプロパティのため、委譲先の内部的な実装に左右される心配がない。
また、クラス同士の関係が固定されない。委譲先を変更するのも自由だし、複数のクラスに処理を委ねることも、インスタンス単位に委譲先を切り替えることすら可能。

継承を想定して設計されたクラスでないならば、まずは継承よりも委譲を利用すべき。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0