web development blog

> 编程 PHP设计模式之抽象工厂模式

php设计模式笔记,第三个是抽象工厂模式。工厂模式为什么又有抽象工厂模式,它们直接有什么区别?上次提及的工厂模式简单的可以看成只有一个工厂,生产各种不同的产品类。而抽象工厂模式是,可以看出是多个工厂的集合。

而抽象工厂模式设计的名词:产品族、产品等级。初步接触理解起来比较容易混淆,如果通俗的理解是,一个工厂可以看成是一个产品族,而产品族可以由多个产品等级(既产品系列)组成,而一个产品等级可以有具体的产品。

测试数据,苹果:手机iphone5,平板电脑ipad 4;三星:手机I9300,平板电脑GALAXY Note 10.1。

结合抽象工厂模式的名词对照关系如下:

产品族:苹果,三星

产品等级:手机,平板电脑

具体产品:iphone 5、ipad4 ,I9300、GALAXY Note 10.1

php如何实现这种模式:首先要用一个接口类来罗列有多少个抽象产品实现的方法;然后有多少个产品族就有多少个工厂类,分别继承接口类,实现接口类,负责创建产品类的实例化。最后我们实现产品类,同类产品族的具体产品类都会有实现一个公共的产品接口接口类。

代码演示,实现抽象工厂模式:

/**
 * PHP设计模式 之 抽象工厂模式
 * @website wmhfly.com
 *
 */
interface IAbsFactory {
 	public function showLastNewMobile();
 	public function showLastNewComputer();
}

class AppleFactory implements IAbsFactory {
	
	public function showLastNewMobile(){
		return new AppleLastNewMobile();
	}
	
	public function showLastNewComputer(){
		return new AppleLastNewComputer();
	}
}

interface IAppleProduct {
	public function getSystemVersion();
	public function getName();
	public function getPrice();
}

class AppleLastNewMobile implements IAppleProduct {
	
	public function getSystemVersion(){
		echo  'iOS 6.0';
	}
	
	public function getName(){
		echo 'iphone 5';
	}
	
	public function getPrice() {
		echo '5288 RMB';
	}
	
}

class AppleLastNewComputer implements IAppleProduct {
	
	public function getSystemVersion(){
		echo  'iOS 6';
	}
	
	public function getName(){
		echo 'ipad 4';
	}
	
	public function getPrice() {
		echo '3688 RMB';
	}
}

class SamsungFactory implements IAbsFactory {
	public function showLastNewMobile() {
		return new SamsungLastNewMobile();
	}
	
	public function showLastNewComputer(){
		return new SamsungLastNewComputer();
	}
}

interface ISamsungProduct {
	public function getSystemVersion();
	public function getName();
	public function getPrice();
}

class SamsungLastNewMobile implements ISamsungProduct {
	public function getSystemVersion(){
		echo 'Android 4.0';	
	}
	public function getName(){
		echo 'I9300';
	}
	public function getPrice(){
		echo '4,699 RMB';
	}
}

class SamsungLastNewComputer  implements ISamsungProduct {
	public function getSystemVersion(){
		echo 'Android 4.0';
	}
	public function getName(){
		echo 'GALAXY Note 10.1';
	}
	public function getPrice(){
		echo '3,800 RMB';
	}
}

测试代码:

/**
 * 产品族 - 苹果
 */
$apple = new AppleFactory();

//打印最新手机产品
$iphone = $apple->showLastNewMobile();
$iphone->getName();
$iphone->getPrice();
$iphone->getSystemVersion();

//打印最新平板电脑
$ipad = $apple->showLastNewComputer();
$ipad->getName();
$ipad->getPrice();
$ipad->getSystemVersion();


/**
 * 产品族 - 三星
 */
$samsung = new SamsungFactory();

//打印最新手机产品
$samsungMob = $samsung->showLastNewMobile();
$samsungMob->getName();
$samsungMob->getPrice();
$samsungMob->getSystemVersion();


//打印最新平板电脑
$samsungIpad = $samsung->showLastNewComputer();
$samsungIpad->getName();
$samsungIpad->getPrice();
$samsungIpad->getSystemVersion();

//输入结果
iphone 5
5288 RMB
iOS 6.0

ipad 4
3688 RMB
iOS 6


-------------------------------------

I9300
4,699 RMB
Android 4.0

GALAXY Note 10.1
3,800 RMB
Android 4.0

抽象工厂模式附件下载:AbstractFactory.php

-留言评论-

  • 留言载入中...

-拍砖-

 

首页|前端技术|编程/php|生活|关于我

Copyright © 2012 wmhfly.com