ホームページ  >  記事  >  バックエンド開発  >  PHPデザインパターン シンプルファクトリーパターン

PHPデザインパターン シンプルファクトリーパターン

齐天大圣
齐天大圣オリジナル
2020-07-30 15:51:221844ブラウズ

音楽を聴く

現在市場に出ている主流の音楽プレーヤーには、QQ Music、NetEase Cloud Music、Kugou Music、Kuwo Music などがあります。

PHPデザインパターン シンプルファクトリーパターン

人によって音楽を聴くために使用するプレーヤーが異なります。音楽を聴くために音楽プレーヤーの 1 つを選択できます。以下のコードを参照してください。

if ($type == 1) {
    $player = new QQPlayer();
} else if ($type == 2) {
    $player = new WyPlayer();
} else if ($type == 3) {
    $player = new KGPlayer();
}

$player->on();  // 打开播放器
$player->choiceMusic('思念是一种病');  // 选择歌曲
$player->play();  // 开始播放

現時点で Kuwo 音楽プレーヤーを追加したい場合、または NetEase Cloud Music を削除できると考えている場合 (音楽を聴くことができません)それ)ジェイ・チョウの曲)の場合、プログラムを変更する必要があります(条件分岐を変更する必要があります)。したがって、そのようなコードを保守するのは困難です。

プログラムを作成するときの 1 つの原則は、変更を抽出してカプセル化することです。条件分岐セクションを抽出し、それを新しいクラスにカプセル化します。

#シンプル エンジニアリング モード

定義: さまざまなパラメーターに基づいてさまざまなクラスのインスタンスを返すことができるファクトリ クラスを定義します。通常、インスタンスには共通の親クラスがあります。

単純なファクトリ パターンでインスタンスを作成するために使用されるメソッドは通常、静的メソッドであるため、単純なファクトリ パターンは

静的ファクトリ メソッドとも呼ばれます

次に、単純なエンジニアリング モードを作成しましょう。コードは次のとおりです。

class SimpleFactory
{
    public static function createMusicPlayer ($type)
    {
        if ($type == 1) {
            $player = new QQPlayer();
        } else if ($type == 2) {
            $player = new WyPlayer();
        } else if ($type == 3) {
            $player = new KGPlayer();
        } else {
            return null;
        }
        return $player;
    }
}

次に、記事の冒頭のコードを次のように変更できます。

$player  = SimpleFactory::createMusicPlayer($type);

$player->on();  // 打开播放器
$player->choiceMusic('思念是一种病');  // 选择歌曲
$player->play();  // 开始播放

疑問があるかもしれませんが、これを行うことに何の意味があるのでしょうか?問題をある場所から別の場所に移しているだけのようです。

考えてみてください。私たちは朝や夜に音楽を聴くことがあります。あるいは、このプレーヤーに聴きたい音楽がない場合は、別のプレーヤーに切り替える必要があります。そうすれば、複数の場所に新しい音楽プレーヤーを作成することが可能になります。したがって、このコードは複数の場所に置くよりも 1 か所に置く方が良いため、変更する必要がある場合は 1 か所に置くだけで済みます。この方法で維持する場合、単純なファクトリ パターン クラスの createMusicPlayer を変更するだけで済みます。

以上がPHPデザインパターン シンプルファクトリーパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。