>  기사  >  백엔드 개발  >  다양한 PHP 디자인 패턴의 간단한 실제 예

다양한 PHP 디자인 패턴의 간단한 실제 예

小云云
小云云원래의
2018-03-14 10:47:331613검색

저는 항상 프레임워크, 버전, 심지어 언어조차 코더에게 중요하지 않다고 느꼈습니다. 특히 고급 프레임워크나 새롭고 희귀한 언어를 마스터하는 것은 정말 중요하지 않습니다. 시간을 보내고 싶은 건 누구나 그렇잖아요. 따라서 기본적인 것, 즉 알고리즘과 데이터 구조, 그리고 좋은 디자인 패턴이 특히 중요합니다.

싱글 케이스 모드

싱글턴 모드의 특징

  • $_instance는 정적 프라이빗 변수로 선언되어야 합니다.

  • 생성자와 클론 함수는 프라이빗으로 선언되어야 합니다. 이는 외부 프로그램이 싱글턴을 잃지 않도록 하기 위함입니다. 예제 패턴의 의미

  • getInstance() 메소드는 공개로 선언되어야 하며, 이 메소드는 고유한 인스턴스에 대한 참조를 반환하기 위해 호출되어야 합니다.

  • ::operator는 정적 변수에만 액세스할 수 있습니다. 또는 정적 함수

  • PHP 싱글톤 모드는 상대적입니다. 왜냐하면 PHP의 해석 및 실행 메커니즘으로 인해 각 PHP 페이지가 해석되고 실행된 후 관련된 모든 리소스가 재활용되기 때문입니다.

<?php
header("Content-type: text/html; charset=utf-8");
    class single{
        public static $arr=array(&#39;host&#39;=>&#39;XXX&#39;,&#39;user&#39;=>&#39;XXX&#39;,&#39;password&#39;=>&#39;XXX&#39;);
        private static $_instance =null;
        private function __construct(){}
        private function __clone(){}
        static public function getInstance(){
            if(self::$_instance== null || isset(self::$_instance)){
                self::$_instance= new self;
            }
                return self::$_instance;   
        }
        public function showSomething(){
            return self::$arr;
        }
    }
    /////////////////////test///////////////
    $a=single::getInstance();
    print_r(single::getInstance()->showSomething());
?>

팩토리 패턴

팩토리 클래스는 다른 객체를 생성하는 데 특별히 사용되는 클래스입니다. 팩토리 클래스는 다형성 프로그래밍에 있어서 매우 중요합니다. 클래스를 동적으로 교체하고 구성을 수정하여 애플리케이션을 더욱 유연하게 만들 수 있습니다. 웹 개발을 위해서는 팩토리 패턴을 마스터하는 것이 필수적입니다.
기능:

팩토리 패턴은 일반적으로 인터페이스와 유사한 다양한 클래스를 반환하는 데 사용됩니다. 팩토리의 일반적인 용도는 다형성 공급자를 만드는 것입니다.

보통 팩토리 패턴에는 일반적으로 팩토리라는 이름의 정적 메서드인 핵심 구성이 있습니다. 이 정적 메서드는 원하는 수의 매개 변수를 허용할 수 있으며 개체를 반환해야 합니다.

팩토리 패턴은 다음과 같이 더 세분화됩니다.

Simple Factory

Factory Method

Abstract Factory
Simple Factory 패턴: 동일한 계층 구조에서 모든 제품을 생산하는 데 사용됩니다. 새로운 제품을 추가해도 어쩔 수 없습니다

공장 모드: 동일한 계층 구조에서 고정된 제품을 생산하는 데 사용됩니다. (모든 제품 추가 지원)

추상 공장: 다양한 제품군의 모든 제품을 생산하는 데 사용됩니다. (새로운 제품 추가에 대해 할 수 있는 일은 없습니다. 제품군 추가 지원)

<?php
//简单工厂模式
header("Content-type: text/html; charset=utf-8");
class simpale{
    public function calculate($num1,$num2,$operator){
                try {
                    $result=0;
                    switch ($operator){
                        case &#39;+&#39;:
                            $result= $num1+$num2;
                            break;
                        case &#39;-&#39;:
                            $result= $num1-$num2;
                            break;
                        case &#39;*&#39;:
                            $result= $num1*$num2;
                            break;
                        case &#39;/&#39;:
                            if ($num2==0) {
                                throw new Exception("除数不能为0");
                            }
                            $result= $num1/$num2;
                            break;
                    }
                return $result;
                }
                catch (Exception $e){
                    echo "您输入有误:".$e->getMessage();
               }
            }
}
//工厂方法模式
    interface  people {
            function  jiehun();
    }
    //定义接口
    class man implements people{
        public $ring=null;
        public $car=null;
        public $house=null;
        public function getAllthing(){
            $this->ring=&#39;10000&#39;;
            $this->car=&#39;100000&#39;;
            $this->house=&#39;1000000&#39;;
        }
        public function jiehun() {
            if($this->ring && $this->car && $this->house)
                        echo &#39;我可以结婚了<br>&#39;;
                    else
                        echo &#39;我是臭屌丝,还不能结婚<br>&#39;;
        }
    }
    class women implements people {
        public $face=&#39;ugly&#39;;
        public function getAllthing(){
            $this->face=&#39;nice&#39;;
        }
          public function jiehun() {
                    if($this->face ==&#39;nice&#39;)
                        echo &#39;我可以结婚了<br>&#39;;
                    else
                        echo &#39;我是臭屌丝,还不能结婚<br>&#39;;
            }
    }
    interface  createpeople { 
        // 注意了,这里是工厂模式本质区别所在,将对象的创建抽象成一个接口。
          public function create();
    }
    class FactoryMan implements createpeople{
          public  function create() {
                    return  new man;
            }
    }
    class FactoryWomen implements createpeople {
           public function create() {
                    return new women;
            }
    }
    class  Client {
        // 简单工厂里的静态方法
            public function test() {
                $Factory =  new  FactoryMan;
                $man = $Factory->create();
                $man->jiehun();
                $Factory =  new  FactoryWomen;
                $woman = $Factory->create();
                $woman->getAllthing();
                $woman->jiehun();
            }
    }
/////////////test////////////
    $f = new Client;
    $f->test();
//抽象模式就是在工厂模式下接口中添加相应的不同方法即可
?>

Strategy Pattern

Strategy Pattern은 일련의 알고리즘을 캡슐화하기 위한 개체의 동작 패턴입니다. 필요한 알고리즘을 동적으로 선택하여 사용하세요.
전략 패턴은 프로그램 내 의사결정 통제와 관련된 패턴을 말합니다. 이 디자인 패턴의 핵심 아이디어 자체가 객체지향 프로그래밍의 다형성 아이디어이기 때문에 전략 패턴은 매우 강력합니다.
전략 패턴의 세 가지 특징:

추상 역할 클래스 정의(각 구현에 대한 공통 추상 메서드 정의)

특정 전략 클래스 정의(상위 클래스의 공통 메서드를 구체적으로 구현)

환경 역할 클래스 정의(개인화된 선언 추상화) 역할 변수, 오버로드된 생성자 메서드, 추상 메서드 실행)

<?php
abstract class baseAgent { //抽象策略类
        abstract function PrintPage();
    }
    //用于客户端是IE时调用的类(环境角色)
    class ieAgent extends baseAgent {
        function PrintPage() {
            return &#39;IE&#39;;
        }
    }
    //用于客户端不是IE时调用的类(环境角色)
    class otherAgent extends baseAgent {
        function PrintPage() {
            return &#39;not IE&#39;;
        }
    }
    class Browser {
    //具体策略角色
        public function call($object) {
            return $object->PrintPage ();
        }
    }
///////////////test////////////////
    $bro = new Browser ();
    echo $bro->call (new ieAgent );

관련 권장 사항:

PHP 디자인 패턴 조합 패턴 및 대소문자 공유

일반적인 PHP 디자인 패턴 공유

PHP에서 일반적으로 사용되는 디자인 패턴 소개 및 사용 예

위 내용은 다양한 PHP 디자인 패턴의 간단한 실제 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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