목차
php模式设计之 工厂模式,php模式设计工厂
php教程 php手册 php模式设计之 工厂模式,php模式设计工厂

php模式设计之 工厂模式,php模式设计工厂

Jun 13, 2016 am 08:55 AM
php5

php模式设计之 工厂模式,php模式设计工厂

  承接上篇php模式设计之 单例模式,(虽然好像关系不大)。今天讲述第二种基础的模式设计——工厂模式。

  那么何为工厂模式?

  从名字来看,似乎看不出什么端倪。工厂模式,和生产有关?还是和生产流程有关?难道还和工厂领导有关?和领导秘书有关?秘书...     好了不卖关子了,所谓工厂模式还真和生产有关。生产什么呢?生产出来的是一个实例对象。通过什么设备生产?通过一个工厂类生产。怎么生产呢?工厂类调用自身静态方法来生产对象实例

   工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态还可以接受任意数据的参数,必须返回一个对象。

  为什么要是用工厂模式?

  很多没接触过工厂模式的人会不禁问,为啥我要费那么大的劲儿去构造工厂类去创建对象呢?不去套用那些易维护,可扩展之类的话,我们可以考虑这样一个简单的问题。如果项目中,我们通过一个类创建对象。在快完成或者已经完成,要扩展功能的时候,发现原来的类类名不是很合适或者发现类需要添加构造函数参数才能实现功能扩展。我靠!我都通过这个类创建了一大堆对象实例了啊,难道我还要一个一个去改不成?我们现在才感受到了“高内聚低耦合”的博大精深。没问题,工厂方法可以解决这个问题。

  再考虑一下,我要连接数据库,在php里面就有好几种方法,mysql扩展,mysqli扩展,PDO扩展。我就是想要一个对象用来以后的操作,具体要哪个,视情况而定喽。既然你们都是连接数据库的操作,你们就应该拥有相同的功能,建立连接,查询,断开连接...(此处显示接口的重要性)。总而言之,这几种方法应该“团结一致,一致对外”。如何实现呢?利用工厂模式。

  工厂模式如何实现?

  相对于单例模式,上面我们提供了足够的信息,工厂类,工厂类里面的静态方法。静态方法里面new一下需要创建的对象实例就搞定了。当然至于考虑上面的第二个问题,根据工厂类静态方法的参数,我们简单做个判断就好了。管你用if..else..还是switch..case..,能快速高效完成判断该创建哪个类的工作就好了。最后,一定要记得,工厂类静态方法返回一个对象。不是两个,更不是三个。

  基本的工厂类

<span>//</span><span>要创建对象实例的类</span>
<span>class</span><span> MyObject{
  
}
 </span><span>//</span><span>工厂类</span>
<span>class</span><span> MyFactory{
</span><span>public</span> <span>static</span> <span>function</span><span> factory(){
</span><span>return</span> <span>new</span> MyObject():<span>
   }
}
 
 
</span><span>$instance</span>=MyFactory::factory();
로그인 후 복사

  一个稍微复杂的工厂模式:

<?<span>php

</span><span>interface</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go();

}

</span><span>class</span> Bus <span>implements</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go(){
        </span><span>echo</span> "bus每一站都要停"<span>;
    }
}

</span><span>class</span> Car <span>implements</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go(){
        </span><span>echo</span> "car跑的飞快"<span>;
    }
}

</span><span>class</span> Bike <span>implements</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go(){
        </span><span>echo</span> "bike比较慢"<span>;
    }
}

</span><span>class</span><span> transFactory{
    </span><span>public</span> <span>static</span> <span>function</span> factory(<span>$transport</span><span>)
    {
        
        </span><span>switch</span> (<span>$transport</span><span>) {
            </span><span>case</span> 'bus':
                <span>return</span> <span>new</span><span> Bus();
                </span><span>break</span><span>;

            </span><span>case</span> 'car':
                <span>return</span> <span>new</span><span> Car();
                </span><span>break</span><span>;
            </span><span>case</span> 'bike':
                <span>return</span> <span>new</span><span> Bike();
                </span><span>break</span><span>;
        }
    }
}

</span><span>$transport</span>=transFactory::factory('car'<span>);
</span><span>$transport</span>->go();
로그인 후 복사

  需要工厂静态方法为factory()的时候,千万别再傻乎乎的把工厂类命名为Factory了。为啥啊?别忘了同名构造函数的事儿啊~

  

  最后还是谈点感受吧,很多新手比较眼高手低,刚刚会了if..else..,session,cookie就要来点高大上的了。与人交谈动辄可扩展性,可维护性之类云云,至于实例的话,就会一时语塞。有时候觉得,无论自己写代码还是和别人学习,都处于“众里寻他千百度”的时候,真正踏实学习后,蓦然回首,“那人却在灯火阑珊处”,大呼:“原来这TM就是***啊”。

  笔者不敢承认自己会模式设计,我也是个不足一年的初学者,分享博客只是想记录自己的学习历程,能得到知道更是求之不得。如果能给别人带来帮助,那就更好啦~~~

 

 

系列文章:

      php模式设计之 单例模式

    php模式设计之 工厂模式

    php模式设计之 注册树模式

 

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

php5와 php8의 차이점은 무엇입니까 php5와 php8의 차이점은 무엇입니까 Sep 25, 2023 pm 01:34 PM

php5와 php8의 차이점은 성능, 언어 구조, 유형 시스템, 오류 처리, 비동기 프로그래밍, 표준 라이브러리 기능 및 보안 측면에서 있습니다. 자세한 소개: 1. 성능 향상 PHP5와 비교하여 PHP8은 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 컴파일하고 최적화하여 실행 속도를 향상시킵니다. PHP8에는 몇 가지 새로운 언어 구조와 기능이 도입되었습니다. PHP8은 명명된 매개변수를 지원하므로 개발자는 매개변수 순서 대신 매개변수 이름을 전달할 수 있습니다.

Jul 24, 2023 pm 04:57 PM

php5에서 포트 80을 변경하는 방법: 1. Apache 서버 구성 파일에서 포트 번호를 편집합니다. 2. PHP가 새 포트에서 작동하도록 PHP 구성 파일을 편집합니다. 3. Apache 서버를 다시 시작하면 PHP 응용 프로그램이 실행됩니다. 새 포트에서 실행을 시작합니다.

php5가 포트 9000에서 수신 대기하지 않는 문제를 해결하는 방법 php5가 포트 9000에서 수신 대기하지 않는 문제를 해결하는 방법 Jul 10, 2023 pm 04:01 PM

php5가 포트 9000을 수신하지 않는 경우의 해결 단계: 1. PHP-FPM 구성 파일을 확인합니다. 2. PHP-FPM 서비스를 다시 시작합니다. 3. 방화벽을 끄거나 포트 전달을 구성합니다. 4. 다른 프로세스가 포트 9000을 사용하는지 확인합니다.

php7과 php5 구문의 차이점은 무엇입니까 php7과 php5 구문의 차이점은 무엇입니까 Jul 10, 2023 pm 03:25 PM

php7과 php5의 구문 차이점은 다음과 같습니다. 1. PHP7은 엄격한 유형 선언을 도입하지만 PHP5 변수 유형은 암시적입니다. 2. PHP7은 스칼라 유형 선언을 지원하지만 PHP5는 지원하지 않습니다. 3. PHP7은 NULL 병합 연산자를 도입합니다. PHP5는 변수가 존재하고 null이 아닌지 확인합니다. 조건문을 사용해야 합니다. 4. PHP7은 새로운 비교 연산자 "<=>"를 추가하지만 PHP5는 그렇지 않습니다. 5. PHP5는 새로운 기능인 익명 클래스를 도입합니다. 하지 않습니다.

php7 버전과 5 버전의 차이점은 무엇입니까? php7 버전과 5 버전의 차이점은 무엇입니까? Sep 15, 2023 pm 04:11 PM

php7과 5 버전의 차이점에는 성능 개선, 스칼라 유형 선언, 반환 값 유형 선언, 예외 처리 개선, 익명 클래스, 구문 개선, 새로운 연산자, 향상된 오류 처리 및 일부 이전 기능 제거가 포함됩니다. 세부 소개: 1. 성능 향상 PHP7은 Zend Engine 3.0이라는 새로운 Zend 엔진을 도입하여 향상된 메모리 관리, 최적화된 함수 호출 및 예외 처리를 통해 PHP5의 성능을 약 2배 향상시켰습니다. , 향상된 가비지 수집 등

php5가 포트 9000에서 수신 대기하지 않는 문제를 해결하는 방법 php5가 포트 9000에서 수신 대기하지 않는 문제를 해결하는 방법 Mar 21, 2023 pm 04:32 PM

PHP5를 사용할 때 일부 사용자는 포트 9000을 수신할 수 없는 상황에 직면할 수 있습니다. 현재 이 문제를 해결하려면 일부 구성 및 문제 해결 작업을 수행해야 합니다.

php5에서 포트 80을 변경하는 방법 php5에서 포트 80을 변경하는 방법 Mar 21, 2023 pm 04:32 PM

​웹사이트 관리자라면 기본 포트인 80에서 PHP5 포트를 변경해야 하는 상황이 발생할 수 있습니다. 이 과정은 다소 시간이 걸릴 수 있지만, 아래 단계만 따라오시면 쉽게 완료됩니다.

PHP7과 PHP5의 구문 차이점에 대해 토론 PHP7과 PHP5의 구문 차이점에 대해 토론 Mar 21, 2023 pm 07:10 PM

PHP는 동적 웹사이트와 애플리케이션을 개발하는 데 널리 사용되는 서버측 프로그래밍 언어입니다. 최근에는 PHP7의 출시가 주목을 받고 있습니다. PHP7은 이전 버전(예: PHP5)에 비해 많은 개선과 최적화를 제공합니다. 이 기사에서는 PHP7과 PHP5의 구문 차이점을 살펴보겠습니다.

See all articles