PHP 设计模式 (未完待续)

PHP 设计模式

一、 OOP介绍

  1. 真理形成的两大要素----事实和抽象
  2. 不要把我们的宝贵的遗产视同儿戏,请珍视这个有序而自由的伟大国度,因为,如果我们蹒跚跌倒,如今的自由和文明将走向毁灭.
  3. 每人都会得到遗传给他的一切,他继承丰富的遗产.

二、1 抽象类

	
		class OneTrick
		{
			private $storeHere;
			public function trick($input)
			{
				$this->storeHere = $input;
				return $this->storeHere;
			}
		{

		$doIt = new OneTrick();
		$dataRow = $doIt ->trick("test");
		echo $dataRow;
	?>
工厂模式

工厂模式是一种创建型设计模式 对于工厂模式要创建的东西是一个产品,这个产品与创建它的类之间不存在绑定

何时使用工厂模式
在某个程度上讲,如何选择设计模式取决于你希望改变什么,如果实例化的子类可能变化,就要使用工厂方法模式
  • 例子


//createor.php
abstract class Creator{
	protected function factoryMethod();
	public function startFactory(){
		$mfg = $this->factoryMethod();
		return $mfg;
	}
}

//Product
interface Product
{
	public function getProperties();
}
TextProduct implements Product{
	private $mfgProduct;
	public function getProperties(){
		$this->mfgProduct = "文本产品";
		return $this->mfgProduct;
	}
}
TextFactory extends Creator {
	protected function factoryMethod()
	{
		$product = new TextProduct();
		return $product->getPorperties();
	}

}

//Client.php

class Client{
	private $someTextObject;
	public function __construct()
	{
		$this->someTextObject = new TextFactory();
		echo $this->someTextObject->startFactory();
	}
}

单例模式

一个无法从其自身外部创建实例的类

	/**
	 * 单例模式
	 */
	
	class PerModel
	{
		static private $instance;
		private $porps;
		
		private function __construct()
		{
		
		}
		
		static public function get_instance()
		{
			if(!self::$instance){              //判断对象是否实例化
				self::$instance = new self();
			}
			
			return self::$instance;
		}
		
		
		public function setPorps($data)
		{
			echo $data;
		}
		private function __clone()         //禁止clone
		{
			// TODO: Implement __clone() method.
		}
	}
	
	$item = PerModel::get_instance();
	
	//$item->setPorps(1);
	
	$items = PerModel::get_instance();
	
	if($item ===$items)
	{
		echo 1;
		echo  "\n";
	}
		

原型设计模式

使用克隆技术来复制实例化对象

何时使用原型设计模式

如果一个项目要求你创建某个原型对象的多个实例 。 例如: 在关于进化发展的研究中,科学家 通常会使用果蝇作为研究对象,可以将雄性和雌性原型作为基础,变异则是某个雄性或雌性实例的克隆,因此 只需要完成两个实例化,然后就可以根据需要clone 多个变异,而不需要由具体类另外创建实例

  • 例子
	
	

你可能感兴趣的:(PHP)