ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクト指向開発 - ファクトリ パターン

PHP オブジェクト指向開発 - ファクトリ パターン

黄舟
黄舟オリジナル
2016-12-29 11:09:531580ブラウズ

ファクトリ パターンとは、一般に、同じ構造を持ついくつかのクラスのクラス ファミリを作成し、このファミリに固有のエントリ クラスを提供することを指します。 「同じ構造」の説明に注意してください。これは、ある種類のオブジェクトが他のオブジェクトと区別できるようないくつかの特徴を持っていることを指します。たとえば、連想質問があり、同じものを 2 つ介して関連付けます。言葉。 「四輪、ガソリン燃焼。」乗用車、バン、タクシーなどはすぐに思い浮かぶと思いますが、バイクは思い浮かびません。ここでいう「四輪」と「ガソリンが燃える」ということは、乗用車、バン、タクシーと同じ特徴であり、乗用車、バン、タクシーを「乗用車」のグループに分類する際に使用します。

php に戻り、ここで例を示してファクトリー パターンを説明します。

現在、自動車工場があり、自動車とバスはエンジン、車体、車輪で構成されています。

分析:

1. さまざまな自動車の製造には共通の規格があり、エンジン、ボディ、ホイールを製造する必要があるため、すべての種類の自動車を製造するためのインターフェイス クラスを開発できます。このインターフェースクラス。

2. 外部の世界は、工場から自動車やバスの生産へのアクセスを提供する必要があります。

//生产汽车的标准  
    interface carNorms{  
        function engine();//引擎  
        function body();//车身  
        function whell();//轮子  
    }  
      
    //生产小汽车  
    class car implements carNorms{  
          
        public function engine(){  
            return '汽车引擎';  
        }  
          
        public function body(){  
            return '汽车车身';  
        }  
          
        public function whell(){  
            return '汽车轮子';  
        }  
          
    }  
      
    //生产巴士车  
    class bus implements carNorms{  
          
        public function engine(){  
            return '巴士引擎';  
        }  
          
        public function body(){  
            return '巴士车身';  
        }  
          
        public function whell(){  
            return '巴士轮子';  
        }  
          
    }  
      
    //汽车工厂  
    class carFactory{  
          
        static public function carInstance($type){  
            $instance='';  
            switch($type){  
                case 'car':  
                    $instance=new car();  
                    break;  
                case 'bus':  
                    $instance=new bus();  
                    break;  
                default:  
                    throw new Exception('本工厂无法生产这种类型的车');  
            }  
            if(!$instance instanceof carNorms){  
                throw new Exception('这种车不符合生产标准');  
            }  
            return $instance;  
        }  
          
    }  
      
    $createCar=carFactory::carInstance('car');  
    $car['engine']=$createCar->engine();  
    $car['body']=$createCar->body();  
    $car['whell']=$createCar->whell();  
      
    print_r($car);

これは標準的な工場クラスです。新しい要件が発生し、工場ではトラックも生産する必要があります。

分析: 生産トラックは工場の生産基準も満たしているため、トラック クラスを直接追加し、対応する入り口を工場クラスに追加できます。

class truck implements carNorms{  
          
        public function engine(){  
            return '卡车引擎';  
        }  
          
        public function body(){  
            return '卡车车身';  
        }  
          
        public function whell(){  
            return '卡车轮子';  
        }  
          
    }
//汽车工厂    
    class carFactory{    
            
        static public function carInstance($type){    
            $instance='';    
            switch($type){    
                case 'car':    
                    $instance=new car();    
                    break;    
                case 'bus':    
                    $instance=new bus();    
                    break;    
                case 'truck':    
                    $instance=new truck();    
                    break;    
                default:    
                    throw new Exception('本工厂无法生产这种类型的车');    
            }    
            if(!$instance instanceof carNorms){    
                throw new Exception('这种车不符合生产标准');    
            }    
            return $instance;    
        }    
            
    }

完了するのは簡単ですが、ここでは、製造基準が変更された場合、品質テストを製造プロセスに追加する必要があると仮定しましょう。この変更を完了するには、品質テスト方法をインターフェースに追加する必要があります。

//生产汽车的标准  
    interface carNorms{  
        function engine();//引擎  
        function body();//车身  
        function whell();//轮子  
        function check();//质量测试  
    }

問題は、工場で生産されるすべての車に品質検査方法を組み込む必要があることですが、この工場では 3 種類の車しか生産されていませんが、それほど面倒ではないようです。しかし、もう一度考えてみましょう。工場に何千もの製品がある場合、規格を追加すると、すべての製品にその規格が追加され、どれだけのコストがかかることになります。これがファクトリ メソッドの欠点です。ファクトリ パターンを使用する場合は注意してください。

上記は PHP オブジェクト指向開発 - ファクトリ モードの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


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