首页 > Web开发 > 详细

PHP设计模式一:工厂方法设计模式

时间:2015-10-22 18:53:54      阅读:280      评论:0      收藏:0      [点我收藏+]

一、什么是工厂方法模式

  作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”。对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定。

实际上,为了保持这种松耦合,客户会通过一个工厂发出请求,再由工厂创建所请求的产品。利用工厂方法模式,请求者只发出请求,而不具体创建产品。

 

二、什么时候使用工厂方法模式

  如果实例化对象的子类可能改变,就要使用工厂方法模式。

 

三、一般工厂方法模式

  使用一般工厂方法模式时,客户只包含工厂的引用,一个工厂生产一种产品。增加一种产品的同时需要增加一个新工厂类和一个新产品类。

<?php
/**
*	一般工厂方法设计模式
**/

//工厂抽象类
abstract class Factory
{
	protected abstract function produce();

	public function startFactory()
	{
		$pro = $this->produce();
		return $pro;
	}
}

//文本工厂
class TextFactory extends Factory
{
	protected function produce()
	{
		$textProduct = new TextProduct();
		return $textProduct->getProperties();
	}
}

//图像工厂
class ImageFactory extends Factory
{
	protected function produce()
	{
		$imageProduct = new ImageProduct();
		return $imageProduct->getProperties();
	}
}

//产品类接口
interface Product
{
	public function getProperties();
}

//文本产品
class TextProduct implements Product
{
	private $text;

	function getProperties()
	{
		$this->text = "此处为文本";
		return $this->text;
	}
}

//图像产品
class ImageProduct implements Product
{
	private $image;

	function getProperties()
	{
		$this->image = "此处为图像";
		return $this->image;
	}
}

//客户类
class Client
{
	private $textFactory;
	private $imageFactory;

	public function __construct()
	{
		$this->textFactory = new TextFactory();
		echo $this->textFactory->startFactory() . ‘<br />‘;

		$this->imageFactory = new ImageFactory();
		echo $this->imageFactory->startFactory() . ‘<br />‘;
	}
}

$client = new Client();
?>

  

四、参数化工厂方法模式

  使用参数化工厂方法模式时,客户包含工厂和产品的引用,发出请求时需要指定产品的种类,一个工厂生产多种产品。增加一种产品时只需要增加一个新产品类即可。

<?php
/**
*	参数化工厂方法设计模式
**/

//工厂抽象类
abstract class Factory
{
	protected abstract function produce(Product $product);

	public function startFactory(Product $product)
	{
		$pro = $this->produce($product);
		return $pro;
	}
}

//工厂实现
class ConcreteFactory extends Factory
{
	protected function produce(Product $product)
	{
		return $product->getProperties();
	}
}

//产品类接口
interface Product
{
	public function getProperties();
}

//文本产品
class TextProduct implements Product
{
	private $text;

	public function getProperties()
	{
		$this->text = "此处为文本";
		return $this->text;
	}
}

//图像产品
class ImageProduct implements Product
{
	private $image;

	public function getProperties()
	{
		$this->image = "此处为图像";
		return $this->image;
	}
}

//客户类
class Client
{
	private $factory;
	private $textProduct;
	private $imageProduct;

	public function __construct()
	{
		$factory = new ConcreteFactory();
		$textProduct = new TextProduct();
		$imageProduct = new ImageProduct();

		echo $factory->startFactory($textProduct) . ‘<br />‘;
		echo $factory->startFactory($imageProduct) . ‘<br />‘;
	}
}

$client = new Client();
?>

  

 

PHP设计模式一:工厂方法设计模式

原文:http://www.cnblogs.com/wujuntian/p/4901582.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!