>백엔드 개발 >PHP 튜토리얼 >PHP 객체 지향 개발 팩토리 패턴

PHP 객체 지향 개발 팩토리 패턴

黄舟
黄舟원래의
2016-12-29 11:09:531744검색

평신도의 관점에서 팩토리 패턴은 동일한 구조를 가진 일부 클래스에 대해 클래스 패밀리를 만들고 이 패밀리에 고유한 진입 클래스를 제공하는 것을 의미합니다. "동일한 구조"에 대한 설명을 주의하세요. 이는 특정 유형의 객체가 다른 객체와 구별할 수 있는 몇 가지 특성을 가지고 있음을 나타냅니다. 예를 들어 연관 질문이 있고 동일한 것을 두 개를 통해 연관시킵니다. 단어. "네 바퀴, 휘발유를 태워요." 나는 자동차, 밴, 택시 및 기타 자동차를 즉시 생각할 수 있지만 오토바이는 생각할 수 없다고 생각합니다. 여기서 '네 바퀴'와 '불타는 휘발유'는 자동차, 밴, 택시와 동일한 특성을 사용하여 자동차, 밴, 택시를 '자동차' 그룹으로 분류합니다.

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 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.