>  기사  >  백엔드 개발  >  PHP의 싱글톤 모드와 팩토리 모드에 대한 자세한 설명과 예

PHP의 싱글톤 모드와 팩토리 모드에 대한 자세한 설명과 예

墨辰丷
墨辰丷원래의
2018-05-18 11:26:371543검색

이 글은 주로 PHP 싱글톤 모드와 팩토리 모드에 대한 관련 정보를 소개합니다. 관심 있는 친구들이 참고할 수 있습니다.

1. 싱글톤 모드는 책임 모드라고도 합니다. 일반인의 관점에서 보면 인스턴스화된 개체는 고유합니다.
모든 싱글톤 패턴에는 최소한 다음 세 가지 공통 요소가 있습니다.

1. 생성자가 있어야 하며 private으로 표시되어야 합니다.
2. 클래스의 인스턴스를 보유하는 정적 멤버 변수가 있어야 합니다. 이 인스턴스에 액세스하는 정적 메서드

싱글톤 클래스는 다른 클래스에서 직접 인스턴스화할 수 없으며 자체적으로만 인스턴스화할 수 있습니다. 인스턴스의 복사본을 생성하지 않지만 싱글톤 클래스에 내부적으로 저장된 인스턴스에 대한 참조를 반환합니다.

싱글턴 패턴의 인스턴스


<?php
class Single {
  private $name;//声明一个私有的实例变量
  private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
  
  }
 
  static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
  static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
   if(!self::$instance) self::$instance = new self();
   return self::$instance;
  }
 
  public function setname($n){ //给变量$name赋值
      $this->name = $n; 
   }
  public function getname(){ //取变量$name的值
      return $this->name; 
   }
 }
 
 
 $a = Single::getinstance();
 $b = Single::getinstance();
 $a->setname(&#39;hello world&#39;);
 $b->setname(&#39;good morning&#39;);
 echo $a->getname();//good morning
 echo $b->getname();//good morning
?>

2. 팩토리 패턴은 객체를 생성하는 특정 메소드를 가진 클래스이므로 new를 직접 사용하는 대신 팩토리 클래스를 사용하여 객체를 생성할 수 있습니다.


그래서 생성된 객체의 유형을 변경하려면 팩토리만 변경하면 됩니다.


<?php
//工厂类(关于运算符的操作)
class factory{
 public static function dx($ope){
  switch($ope){
   case "+":
    return new plus();
    break;
   case "-":
    return new sub();
    break;
   case "%":
    return new rem();
    break;
  }
 }
} 
$ope = factory::dx("+");
$ope->a = 20;
$ope->b = 10;
echo $ope->opera();

팩토리 패턴 예


class Factory {//创建一个基本的工厂类
  static public function fac($id){//创建一个返回对象实例的静态方法
   if(1 == $id) return new A();
   elseif(2==$id) return new B();
   elseif(3==$id) return new C();
   return new D();
  }
 }
 
 interface FetchName {//创建一个接口
  public function getname();//
 }
 
 class A implements FetchName{
  private $name = "AAAAA";
  public function getname(){ 
      return $this->name; 
    }
 }
 
 class C implements FetchName{
  private $name = "CCCCC";
  public function getname(){
      return $this->name; 
    }
 }
 class B implements FetchName{
  private $name = "BBBBB";
  public function getname(){ 
      return $this->name;
    }
 }
 
 class D implements FetchName{
  private $name = "DDDDD";
  public function getname(){ 
      return $this->name; 
    }
}
 
 
 $o = Factory::fac(6);//调用工厂类中的方法
 if($o instanceof FetchName){
 echo $o->getname();//DDDDD
 }
 
 $p=Factory::fac(3);
 echo $p->getname();//CCCCC
?>

관련 권장 사항:

php 패턴 디자인 싱글턴 패턴

php 패턴 디자인 어댑터 패턴

PHP 싱글턴에 대한 간략한 분석 모드, PHP 모드의 간략한 분석_PHP 튜토리얼

위 내용은 PHP의 싱글톤 모드와 팩토리 모드에 대한 자세한 설명과 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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