主頁 > 知識庫 > 深入分析PHP設計模式

深入分析PHP設計模式

熱門標簽:公司外呼系統(tǒng)中心 菏澤語音外呼系統(tǒng)運營商 電子地圖標注怎么修改 天客通地圖標注 地圖標注符號樣式有 廈門400電話辦理選易號網(wǎng) 梧州市機器人外呼系統(tǒng)怎么樣 如何在世界地圖標注 臨沂crm外呼系統(tǒng)平臺

1、單例模式

一個類,只能允許有一個對象存在

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

  public static function getInstance(){
    $_test = new test();
    return $_test;
  }
}
$test = test::getInstance();
var_dump($test);
?>

2、工廠模式

工廠模式,顧名思義,如同工廠一樣,你把原材料放入工廠中,出來的是成品,而你并不需要知道工廠里做了什么,工廠模式主要用于解耦。

把對象的創(chuàng)建和使用的過程分開,比如: ClassA 調(diào)用 ClassB,那么 ClassA 只調(diào)用ClassB 的方法,
至于實例化 ClassB 則在工廠內(nèi)實現(xiàn)。這樣既減少了代碼的重復使用,也方便對 ClassB 的后期維護。
如果 ClassB 實例化過程很復雜,使用簡單工廠模式就會發(fā)現(xiàn)外部無需關注復雜的實例化,只管調(diào)用 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、注冊模式

注冊模式,解決全局共享和交換對象。已經(jīng)創(chuàng)建好的對象,掛在到某個全局可以使用的數(shù)組上,

在需要使用的時候,直接從該數(shù)組上獲取即可。將對象注冊到全局的樹上。任何地方直接去訪問。

?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、適配器模式

將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。

//目標角色
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、策略模式

這是一個男人和女人的問題,將一組特定的行為和算法封裝成類,以適應某些特定的上下文環(huán)境。

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 "電子產(chǎn)品";
  }
}

Page.php//執(zhí)行文件
?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、原型模式

不常用,大的對象類才使用,表現(xiàn)在clone

7、觀察者模式

從面向過程的角度來看,首先是觀察者向主題注冊,注冊完之后,主題再通知觀察者做出相應的操作,整個事情就完了

/**
 * 事件產(chǎn)生類
 * 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 收到執(zhí)行通知 執(zhí)行完畢!\n";
  }
}

/**
 * 觀察者1
 */
class ObServer2 implements ObServer
{
  public function update($event_info = null)
  {
    echo "觀察者2 收到執(zhí)行通知 執(zhí)行完畢!\n";
  }
}

/**
 * 事件
 * Class Event
 */
class Event extends EventGenerator
{
  /**
   * 觸發(fā)事件
   */
  public function trigger()
  {
    //通知觀察者
    $this->notify();
  }
}

//創(chuàng)建一個事件
$event = new Event();
//為事件增加旁觀者
$event->add(new ObServer1());
$event->add(new ObServer2());
//執(zhí)行事件 通知旁觀者
$event->trigger();

以上就是深入分析PHP設計模式的詳細內(nèi)容,更多關于PHP設計模式的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • PHP設計模式(九)外觀模式Facade實例詳解【結構型】
  • PHP設計模式(八)裝飾器模式Decorator實例詳解【結構型】
  • PHP設計模式(七)組合模式Composite實例詳解【結構型】
  • PHP設計模式(六)橋連模式Bridge實例詳解【結構型】
  • PHP設計模式(五)適配器模式Adapter實例詳解【結構型】
  • PHP設計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】
  • PHP設計模式(三)建造者模式Builder實例詳解【創(chuàng)建型】
  • PHP設計模式(一)工廠模式Factory實例詳解【創(chuàng)建型】

標簽:雞西 郴州 白城 貴陽 綿陽 黃石 瀘州 迪慶

巨人網(wǎng)絡通訊聲明:本文標題《深入分析PHP設計模式》,本文關鍵詞  深入分析,PHP,設計模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入分析PHP設計模式》相關的同類信息!
  • 本頁收集關于深入分析PHP設計模式的相關信息資訊供網(wǎng)民參考!
  • 推薦文章