php如何调试mvc类型的项目:工厂FactoryMethod
php如何调试mvc类型的项目:工厂FactoryMethod工厂(Factory Method)模式标准定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例化延迟到其子类。1 标准定义Abstract:In this paper we use an example to describe thefactory (Method Factory) mode in Gof 23 design mode and use PHP program codeto achieve.Key word: Gof 23 DesignPatterns Factory Method Pattern PHP
摘要:本文用一个实例场景描述Gof 23设计模式中的工厂(FactoryMethod)模式,并用PHP程序代码给予实现。
关键字:Gof 23 设计模式 工厂模式 PHP
Factory Method Patternbased on PHP
REN gang
Abstract:In this paper we use an example to describe thefactory (Method Factory) mode in Gof 23 design mode and use PHP program codeto achieve.
Key word: Gof 23 DesignPatterns Factory Method Pattern PHP
1 标准定义
工厂(Factory Method)模式标准定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例化延迟到其子类。
2 分析和说明
工厂(Factory Method)模式是一个创建性的模式。它要求工厂类和产品类分开。由一个工厂类可以根据传入的参量决定创建出哪一种产品类的实例,但这些不同的实例有共同的父类。Factory Method把创建这些实例的具体过程封装起来了。当一个类无法预料将要创建哪种类的对象或是一个类需要由子类来指定创建的对象时,我们就需要用到Factory Method模式了。
图1 工厂模式结构
工厂(Factory Method)模式结构如图1所示说明。工厂模式涉及到抽象工厂角色、具体工厂角色、抽象产品角色以及具体产品角色等。
抽象工厂(Creator)角色:任何在模式中创建对象的工厂类必须实现这个接口。在实际的系统中,这个角色也常常使用抽象类或接口实现。
具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。在实际的系统中这个角色使用具体类实现。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在实际的系统中,这个角色也常常使用抽象类或者接口来实现。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。这个角色使用具体类来实现。
3 应用场景举例
比如某一类公司能提供一种产品,但是这种产品有不同的型号。当客户需要一种产品,但是没有具体是哪一种型号,只是提供了一些产品参数,公司就根据这些参数来提供产品。这就是工厂模式。其类结构如图所示。
图2 例子程序工厂模式类结构图
4.PHP的程序实现代码
PHP程序实现主要包括Company类,Product接口, ProductA和ProductB类等5个类。其关系如图2所示。下面分别列出这此文件的程序代码,最后列出测试代码并显示输出结果。
程序代码清单01
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>factorymethod 设计模式(对象方式)</title>
<?php
echo "factorymethod设计模式(对象方式).<br><br>";
interface Product {
public function getProductType();
public function doUse();
}
class ProductA implements Product{
var $productType = "ProductA";
private $pproductParameter = "A";
public function getProductType(){
return $productType;
}
public function getParameter(){
return $productParameter;
}
public function doUse(){
echo "这是ProductA实现的功能<br>";
}
}
class ProductB implements Product{
var $productType = "ProductB";
private $pproductParameter = "B";
public function getProductType(){
return $productType;
}
public function getParameter(){
return $productParameter;
}
public function doUse(){
echo "这是ProductB实现的功能<br>";
}
}
interface Company {
public function bulidProduct( $Parameter);
}
class CompanyA implements Company
{
public function bulidProduct( $Parameter)
{
if ( strcasecmp($Parameter "A")== 0 )
return new ProductA();
else if (strcasecmp($Parameter "B")== 0)
return new ProductB();
else return null;
}
}
/* 程序开始运行 */
echo "——————程序开始运行.————————<br>";
$company = new CompanyA();
/* 根据传入的参数得到ProductA产品 */
$product = $company->bulidProduct("A");
$product->doUse();
/* 根据传入的参数得到ProductB产品 */
$product = $company->bulidProduct("B");
$product->doUse();
echo "——————程序运行结束.————————<br>";
?>
</head>
<body>
</body>
</html>
工厂模式测试类输出结果如下所示:
factorymethod设计模式(对象方式).
——————程序开始运行.————————
这是ProductA实现的功能
这是ProductB实现的功能
——————程序运行结束.————————
觉得有用的小伙伴请给点一下关注,私信回复“学习”可以领取最新学习视频资料哦~