シンプルなデザイン


デザインモード


こうじょう

  • 最も一般的なパターン
  • クラスが所望のクラスオブジェクトを生成するモード
  • サンプルコード

    class AUtomobile
    {
    	private $vehicleMake;
    	private $vehicleModel;
    
    	public function __construct($make, $model)
    	{
    		$this->vehicleMake = $make;
    		$this->vehicleModel = $model;
    	}
    
    	public function getMakeAndModel()
    	{
    		return $this->vehicleMake.' '.$this->vehicleModel;
    	}
    }
    
    class AutomobileFactory()
    {
    	public static function create($make, $model)
    	{
    		return new Automobile($make, $model);
    	}
    }
    
    //Automobile 객체를 생성하는 팩토리사용
    $veyron = AutomobileFactory::create('Bugatti', 'Veyron');
    	print_r($veyron->getMakeAndModel());//Bugatti Veyron 출력
    メリット
  • Automobileクラスの名前を変更、変更、または別のクラスに置き換えるには、ファクトリクラスのcreate関数を変更するだけです.
  • 複雑なクラスを作成し定義し、ファクトリクラスだけで
  • たんりん

  • 特定のクラスについては、1つのインスタンスのみであり、すべての場所でインスタンス
  • を使用する必要がある.
  • グローバルオブジェクト(構成クラスなど)、共有リソース(イベントキューなど)、単一ループ
  • モードの特徴は、アプリケーション全体の範囲に影響を与える状態情報を生成することである->テスト可能性を低減する->ほとんどの場合、単転クラスの代わりに依存注入(Dependenct Injection)を使用することができるため、単転クラスを回避することが望ましい.
  • 注意事項

  • 生成者construct()は、他の場所で勝手に生成されないように、新しい演算子を使用して保護する
  • Magicメソッド__cloneはプライベートに制限され、クローン演算子を使用してコピーすることはできません.
  • Magic法__wakeupはプライベートであり、グローバル関数unserializeは使用できない.
  • の新しいインスタンスが作成されると、静的方法getInstance()内で遅延する静的バインディングによって作成される.
  • Staticキーワードを使用してSingletonクラスを継承し、単一ループモードを使用するサブクラスを作成

    戦略(Strategy)

  • 特定のアルゴリズムをカプセル化する一方は、アルゴリズムの実際の実装を全く理解していない場合に実体化アルゴリズムを使用することができる.
  • には2つの目的があります
    -出力クラスの実施者ごとに遵守すべき実施規則を提供する
    -一般的な「Output Interface」インタフェースを使用して、アルゴリズムを使用するコード・ページにも正しいタイプの
  • が使用されていることを確認します.
  • アルゴリズムのパッケージ
  • <?php
    
    interface OutputInterface
    {
        public function load();
    }
    
    class SerializedArrayOutput implements OutputInterface
    {
        public function load()
        {
            return serialize($arrayOfData);
        }
    }
    
    class JsonStringOutput implements OutputInterface
    {
        public function load()
        {
            return json_encode($arrayOfData);
        }
    }
    
    class ArrayOutput implements OutputInterface
    {
        public function load()
        {
            return $arrayOfData;
        }
    }
    
    ---
    
    class SomeClient
    {
        private $output;
    
        public function setOutput(OutputInterface $outputType)
        {
            $this->output = $outputType;
        }
    
        public function loadOutput()
        {
            return $this->output->load();
        }
    }
    
    ---
    $client = new SomeClient();
    
    // 배열 형태의 출력을 원한다면?
    $client->setOutput(new ArrayOutput());
    $data = $client->loadOutput();
    
    // JSON 형태를 원한다면?
    $client->setOutput(new JsonStringOutput());
    $data = $client->loadOutput();

    フロントエンドコントローラ

  • モード
  • Webアプリケーションからのすべてのリソースを処理する
  • コントローラからすべての依存関係をロード、HTTP要求を処理して送信応答に、
  • .

    MVC(Model-View-Controller)

  • MVCモードおよびこのモードのバリエーションHMVC、MVVMモードは、アプリケーションコードを特定のカラムを実行する論理ユニット
  • に分割する.
  • PHPフレームワークは主に
  • を使用する.