PHP 设计模式

PHP 设计模式

微软设计模式理论是 “该文档介绍了模式,然后在一个仓库或目录中展示它们,该目录的组织结构有助于您找到解决问题的正确模式组合”。

设计模式的示例

单例模式

一个类只有一个实例,它提供了对该实例的全局访问点。以下代码将解释单例模式的概念。

<?php
   class Singleton {
      public static function getInstance() {
         static instance = null;

         if (null ===instance) {
            instance = new static();
         }
         returninstance;
      }
      protected function __construct() {
      }

      private function __clone() {
      }

      private function __wakeup() {
      }
   }

   class SingletonChild extends Singleton {
   }

   obj = Singleton::getInstance();
   var_dump(obj === Singleton::getInstance());

   anotherObj = SingletonChild::getInstance();
   var_dump(anotherObj === Singleton::getInstance());
   var_dump($anotherObj === SingletonChild::getInstance()); 
?>

上述示例是基于静态方法创建的,其方法名称是getInstance()

工厂模式

一个简单的类会创建对象,而您想要使用该对象。以下示例将说明工厂设计模式。

<?php
   class Automobile {
      private bikeMake;
      privatebikeModel;

      public function __construct(make,model) {
         this->bikeMake =make;
         this->bikeModel =model;
      }

      public function getMakeAndModel() {
         return this->bikeMake . ' ' .this->bikeModel;
      }
   }

   class AutomobileFactory {
      public static function create(make,model) {
         return new Automobile(make,model);
      }
   }

   pulsar = AutomobileFactory::create('ktm', 'Pulsar');
   print_r(pulsar->getMakeAndModel());

   class Automobile {
      private bikeMake;
      privatebikeModel;

      public function __construct(make,model) {
         this->bikeMake =make;
         this->bikeModel =model;
      }

      public function getMakeAndModel() {
         return this->bikeMake . ' ' .this->bikeModel;
      }
   }

   class AutomobileFactory {
      public static function create(make,model) {
         return new Automobile(make,model);
      }
   }
   tpulsar = AutomobileFactory::create('ktm', 'pulsar');

   print_r(pulsar->getMakeAndModel()); 
?>

工厂模式的主要困难在于会增加复杂性,并且对于优秀的程序员来说并不可靠。

策略模式

策略模式创建了算法家族,并封装了每个算法。在这里,每个算法都可以在家族内互相替换。

<?php
   elements = array(
      array(
         'id' => 2,
         'date' => '2011-01-01',
      ),
      array(
         'id' => 1,
         'date' => '2011-02-01'
      )
   );collection = new ObjectCollection(elements);collection->setComparator(new IdComparator());
   collection->sort();

   echo "Sorted by ID:\n";
   print_r(collection->elements);

   collection->setComparator(new DateComparator());collection->sort();

   echo "Sorted by date:\n";
   print_r($collection->elements);
?>

模型视图控制

视图充当GUI,模型充当后端,控制器充当适配器。这三个部分相互连接。它们之间传递数据和访问数据。

PHP 设计模式

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程