>  기사  >  백엔드 개발  >  PHP 디자인 패턴에서 팩토리 모드와 싱글톤 모드의 차이점

PHP 디자인 패턴에서 팩토리 모드와 싱글톤 모드의 차이점

一个新手
一个新手원래의
2017-10-18 09:07:562705검색
//让该类在外界无法造对象
//让外界可以造一个对象,做一个静态方法返回对象
//在类里面通过让静态变量控制返回对象只能是一个。

싱글턴 패턴에는 세 가지 주요 사항이 있습니다.

  1. 첫째, 클래스는 인스턴스를 하나만 가질 수 있습니다.

  2. 둘째, 이 인스턴스를 자체적으로 생성해야 합니다. 이 인스턴스에 대한 보고는 시스템 전체에 걸쳐 제공됩니다.

  3. PHP 싱글턴 모드를 사용해야 하는 이유

1. PHP는 주로 데이터베이스 애플리케이션에 사용됩니다. 싱글톤 모드를 사용하면 새 작업에 많은 리소스가 소비되는 것을 방지할 수 있으며 데이터베이스 연결을 줄여 너무 많은 연결이 발생할 가능성을 줄일 수도 있습니다.

  1. 2. 시스템의 특정 구성 정보를 전역적으로 제어하기 위해 클래스가 필요한 경우 싱글톤 모드를 사용하여 쉽게 구현할 수 있습니다. 이는 zend Framework의 FrontController 부분에서 찾을 수 있습니다.

  2. 3. 페이지 요청에서는 모든 코드(예: 데이터베이스 작업 클래스 db)가 하나의 클래스에 집중되어 있기 때문에 디버깅이 쉽습니다. 클래스에 후크를 설정하고 로그를 출력하여 어디서나 에코를 방지할 수 있습니다. .

  3. class cat
    {
        public $name;
        private function __construct()
        {
    
        }
        static $temp;
        static function new_ob()
        {
            if(empty(self::$temp)){
               self::$temp = new cat();
            }
            return self::$temp;
        }
        function  speak(){
            return "喵喵喵";
        }
    }
    //$mao = new cat();
    
    
    //如果没有猫就造一个,然后等于新的xxx,如果有,直接等于。达到限制的目的。
    //$mao;
    //if (empty($mao)){
    //    $mao = new cat();
    //}
    //    $xxx = $mao;
    
    $mao = cat::new_ob();
    $mao2 = cat::new_ob();
    //给1猫改名字,2猫的名字输出为1猫改的名字。此为单例。
    $mao->name = "py";

    2. 간단한 팩토리 패턴

①추상 기본 클래스: 클래스의 일부 추상 메서드를 정의하여 하위 클래스에서 구현합니다.

  • ②추상 기본 클래스에서 상속되는 하위 클래스: 구현 기본 클래스

  • ③Factory 클래스: 해당 하위 클래스를 모두 인스턴스화하는 데 사용됩니다.

  • abstract class jsq
    {
        public $a;
        public $b;
    
        function yunsuan(){
        }
    }
    //此为拓展
    class jiafa extends jsq
    {
        function  yunsuan()
        {
            //parent::yunsuan(); // TODO: Change the autogenerated stub
            return $this ->a+$this->b;
        }
    }
    class  jianfa extends jsq
    {
        function yuansuan(){
            return $this->a-$this->b;
        }
    }
    class factory
    {
       static function create($x){
           switch ($x){
               case "+":
                   return new jiafa();
                   break;
               case "-":
                   return new jianfa();
                   break;
           }
       }
    }
    //$j1 = new jiafa();
    //$j1->a = 1;
    //$j1->b = 2;
    //$j1->yunsuan();
    
    //尽量避免实例化对象,采用静态方法获取。
    $jf = factory::create("+");
    $jf->a = 1;
    $jf->b = 2;
    echo $jf->yunsuan();

위 내용은 PHP 디자인 패턴에서 팩토리 모드와 싱글톤 모드의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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