php设计模式

一、简单工厂模式

简单工厂模式又被称为静态工厂模式,具体指创建一个类似于工厂的类,通过类中成员方法的调用返回不同类型的对象,通过对该类中成员方法的调用返回不同类型的对象。

在面向对象编程方式中,简单工厂模式是一种经常使用到的模式。提供了一种在实时状态下实例化对象的机制。

e.g

<?php
abstract class Product//抽象类
{
     abstract function getName();//抽象方法
}

class ProductA extends Product//具体产品类
{
     public function getName()
     {
            echo "i am productA";
     }
}
class ProductB extends Product//具体产品类
{
     public function getName()
     {
            echo "i am productB";
     }
}

class ProductFactory//工厂类
{
     static function create($name)
     {
          switch($name)
          {
                case "A":
                      return new ProductA();
                case "B":
                      return new ProductB();
          }
     }
}

$product = ProductFactory::create("A");
$product->getName();
$product = ProductFactory::create("B");
$product->getName();

二、单元素模式

单元素模式指的是在应用程序范围内只对指定的类创建一个实例。单元素模式包含的对象只有一个,就是单元素本身。

单元素模式能够确保某个类只生成一个实例对象,通常该模式中包含一个私有构造方法,用来确保用户无法通过克隆的方式对其进行实例化。此外还包含一个私有静态属性与公有静态方法。

公有静态方法负责对其本身实例化,然后将这个对象存储在私有静态属性中,用来确保只有一个实例被创建。

e.g

<?php
class Singleton
{
    private static $instance = null;
    pricate function __construct(){}
    public static function getInstance()
    {
          if(self::$instance==null)
          {
                return new Singleton();
          }
          retrun self::$instance;
    }
    public function printString()
    {
         echo  "hellword";
    }
}
$class = Singleton::getInstance();
$class->printString();
其中私有构造方法,用来确保Singleton类无法通过创建对象或者克隆的方式对进行实例化

三、观察者模式

观察者模式必须包含两个角色,观察者和被观察对象。

观察者模式的实现通常是一个对象通过添加一个方法使本身变得可观察。

e.g

interface IObserver
{
    function onChanged($sender,$args);
}
interface IObservable
{
     function addObserver($observer);
}
class UserList implements IObservable
{
      private $_observers = array();
      public function addCustomer($name)
      {
             foreach($this->_observers as $obs)
             {
                $obj->onChanged($this,$name);
              }
      }
      public function addObserver($observer)
{
    $this->_observers[] = $observer;
}
}

class UserListLogger implements IObserver
{
      public function onChanged($sender,$args)
     {
          echo "$args被添加到用户列表中";
     }
}
$ul = new UserList();
$ul->addObserver(new UserListLogger());
$ul->addCustomer('cz');
四、命令模式
命令模式用来分离请求操作的客户端和执行该操作的那个对象。通过将请求本身变成一个对象来使行为请求者可向未指定的应用对象提出请求。

e.g

<?php
interface ICommand//命令处理接口
{
	function onCommand($name,$args);
}

class CommandChain
{
	private $_commands = array();
	
	public function addCommand($cmd)//添加命令处理
	{
		$this->_commands[] = $cmd;
	}
	
	public function runCommand($name,$args)//执行命令
	{
		foeach($this->_commands as $cmd)
		{
			if($cmd->onCommand($name,$args))
			{
				return;//命令执行成功退出
			}
		}
	}
}

class UserCommand implements ICommand//用户命令处理类
{
	public function onCommand($names,$args)
	{
		if($name != '用户')
		{
			return false;
		}
		else
		{
			echo "用户命令处理:".$names;
			return false;
		}
	}
	
}

class MailCommand implements ICommand//邮件命令处理类
{
	public function onCommand($names,$args)
	{
		if($name != '邮件')
		{
			return false;
		}
		else
		{
			echo '邮件命令处理'.$names;
			return false;
		}
	}
}

$c = new CommandChain();
$c->addCommand(new UserCommand());
$c->addCommand(new MailCommand());
$c->runCommand('用户',null);
$c->runCommand('邮件',null);
?>

五、策略模式

指的是在程序中涉及决策控制的一种模式。策略模式定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。策略模式使这些算法在客户端调用它他们的时候能互不影响的变化。

策略模式通常定义一个抽象的基类,然后根据情况的不同创建不同的类继承这个基类。

<?php
interface IStrategy
{
	public function OnTheWay(); 
}
class WalkStrategy implements IStrategy
{
	public function OnTheWay()
	{
		echo "一个人在路上走";
	}
}
class RideBickStrategy implements IStrategy
{
	public function OnTheWay()
	{
		echo "一个人骑自行车在路上";
	}
}

class Context
{
	public function find($stategy)
	{
		$stategy->OnTheWay();
	}
}
$c = new Context();
$c->find(new WalkStrategy());
$c->find(new RideBickStrategy());
?>

五、MVC模式

你懂的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章