PHP 디자인 모델 깊이 분석

1.단일 모드
하나의 클래스,하나의 대상 만 존재 할 수 있 습 니 다.

<?php
class test{
  protected function __construct(){
  }

  public static function getInstance(){
    $_test = new test();
    return $_test;
  }
}
$test = test::getInstance();
var_dump($test);
?>
2.공장 모델
공장 모델 은 말 그대로 공장 처럼 원자 재 를 공장 에 넣 고 완제품 으로 나 왔 습 니 다.공장 에서 무엇 을 했 는 지 알 필요 가 없습니다.공장 모델 은 주로 결합 을 푸 는 데 사 용 됩 니 다.
대상 의 생 성과 사용 과정 을 분리 합 니 다.예 를 들 어 ClassA 가 ClassB 를 호출 하면 ClassA 는 ClassB 만 호출 하 는 방법 입 니 다.
실례 화 된 ClassB 는 공장 내 에서 이 루어 진다.이렇게 하면 코드 의 중복 사용 을 줄 일 뿐만 아니 라 ClassB 에 대한 후기 유지보수 도 편리 하 다.
만약 ClassB 실례 화 과정 이 매우 복잡 하 다 면 간단 한 공장 모델 을 사용 하면 외부 에서 복잡 한 실례 화 에 관심 을 가지 지 않 고 ClassB 를 호출 하 는 방법 만 사용 하면 되 고 오 류 를 줄 일 수 있다.

interface mysql{ 
  public function connect();
}
 
class mysqli2 implements mysql{
  public function connect(){
    echo 'mysqli';
  }
}
 
class pdo2 implements mysql{
  public function connect(){
    echo 'pdo';
  }
}

class mysqlFactory{
  static public function factory($class_name){
    return new $class_name();
  }
}
$obj = mysqlFactory::factory('pdo2');
$obj->connect();
3.등록 모드
등록 모드,전역 공유 와 교환 대상 해결.전역 적 으로 사용 할 수 있 는 그룹 에 걸 려 있 는 대상 을 만 들 었 습 니 다.
사용 이 필요 할 때 이 배열 에서 직접 가 져 오 면 됩 니 다.대상 을 전역 트 리 에 등록 합 니 다.어디 든 직접 방문 하 다.

<?php
class Register
{
    protected static $objects;
    function set($alias,$object)//           
    {
      self::$objects[$alias]=$object;//       
    }
    static function get($name){
      return self::$objects[$name];//            
     }
  function _unset($alias)
  {
     unset(self::$objects[$alias]);//            。
    }
}

\Auto\Register::set('single',$single);
$single = \Auto\Register::get('single');
var_dump($single);
4.어댑터 모드
하나의 종류의 인 터 페 이 스 를 고객 이 원 하 는 다른 인터페이스 로 바꾸다.

//    
interface Aims
{
  public function newMethod1();
  public function newMethod2();
}
 
//       (Adaptee)
Class Man
{
  public function oldMethod1()
  {
    echo 'man';
  }
 
  public function oldMethod2()
  {
    echo '  ';
  }
}
 
//       (Adaptee)
Class Woman
{
  public function oldMethod1()
  {
    echo 'woman';
  }
 
  public function oldMethod2()
  {
    echo '  ';
  }
}
 
//   ,
Class Adapters implements Aims
{
  private $adaptee;
  public function __construct($adaptee)
  {
    $this->adaptee = $adaptee;
  }
 
  public function newMethod1()
  {
    //               
    echo 'sex :';
    $this->adaptee->oldMethod1();
  }
 
  public function newMethod2()
  {
    echo 'sex name :';
    $this->adaptee->oldMethod2();
  }
}
 
$adapter1 = new Adapters(new Man);
$adapter1->newMethod1();
$adapter2 = new Adapters(new Woman);
$adapter2->newMethod2();
5.전략 모드
이것 은 한 남자 와 여자 의 문제 로 특정한 행위 와 알고리즘 을 분류 하여 특정한 문맥 환경 에 적응 하도록 한다.

UserStrategy.php
<?php
/*
 *          ,         。
 */
interface UserStrategy
{
  function showAd();
  function showCategory();
}

FemaleUser.php
<?php
class FemaleUser implements UserStrategy
{
  function showAd(){
    echo "2016    ";
  }
  function showCategory(){
    echo "  ";
  }
}

MaleUser.php
<?php
class MaleUser implements UserStrategy
{
  function showAd(){
    echo "IPhone6s";
  }
  function showCategory(){
    echo "    ";
  }
}

Page.php//    
<?php
require_once 'Loader.php';
class Page
{
  protected $strategy;
  function index(){
    echo "AD";
    $this->strategy->showAd();
    echo "<br>";
    echo "Category";
    $this->strategy->showCategory();
    echo "<br>";
  }
  function setStrategy(UserStrategy $strategy){
    $this->strategy=$strategy;
  }
}

$page = new Page();
if(isset($_GET['male'])){
  $strategy = new MaleUser();
}else {
  $strategy = new FemaleUser();
}
$page->setStrategy($strategy);
$page->index();
6.원형 모드
클 라 이언 트
7.관찰자 모드
과정 을 대상 으로 하 는 측면 에서 볼 때 먼저 관찰자 가 주제 에 등록 하고 등록 한 후에 주 제 는 관찰자 에 게 해당 하 는 조작 을 하 라 고 알 리 면 모든 일이 끝난다.

/**
 *      
 * Class EventGenerator
 */
abstract class EventGenerator
{
  private $ObServers = [];

  //     
  public function add(ObServer $ObServer)
  {
    $this->ObServers[] = $ObServer;
  }

  //    
  public function notify()
  {
    foreach ($this->ObServers as $ObServer) {
      $ObServer->update();
    }
  }

}

/**
 *       
 * Interface ObServer
 */
interface ObServer
{
  public function update($event_info = null);
}

/**
 *    1
 */
class ObServer1 implements ObServer
{
  public function update($event_info = null)
  {
    echo "   1            !
"; } } /** * 1 */ class ObServer2 implements ObServer { public function update($event_info = null) { echo " 2 !
"; } } /** * * Class Event */ class Event extends EventGenerator { /** * */ public function trigger() { // $this->notify(); } } // $event = new Event(); // $event->add(new ObServer1()); $event->add(new ObServer2()); // $event->trigger();
이상 은 PHP 디자인 모델 의 상세 한 내용 을 깊이 분석 하 는 것 입 니 다.더 많은 PHP 디자인 모델 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기