在面向对象的程序中,我曾经见过的最大的switch/case语句所具有的条件超过了20个。在运行期间,这个代码模块每次都要执行所有的条件。每个条件都负责创建一个新的对象,这个对象被用于与应用程序API的外部使用这进行通信。对其中一个执行某些常规的故障处理之后,我开始研究应用程序所实现的接口。令我吃惊的是,switch/case语句中引用的每个类都在实现相同的接口!随后要在switch/case语句中添加新的条件语句时,我建议转而使用工厂模式。
什么是工厂模式?
工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类的步骤。
随着PHP发展并演变为一种语言,它的功能不断地通过应用经过验证的设计模式来提供简单的开发手段。PHP中一个特别有用的功能是能够创建基于变量内容的类的新实例。这种对象实例化的动态方法是PHP中实现工厂设计模式的一种代码块构建途径。
基于工厂设计模式的类有助于减少主代码流中基于条件的复杂性。在整个应用程序中,调用对象的方式众多而且不同。与某个对象创建相关的任何修改都会影响到应用程序的其余部分。假设实例化5个对象中的其中一个,从而完成某种功能性。创建条件语句来判断实例化的对象是一种方法。条件语句可能是复杂的if/else语句或switch/case语句。这种功能性可以在应用程序中的许多地方使用,但是会导致重复的代码。接下来,如果添加第六个对象或修改现有5个对象其中一个的名称,那么程序代码的所有实例都需要被修改和再次测试。通过提供一个创建上述对象的简单接口,工厂设计模式有助于避免这个令人头痛的问题。无论对象被修改或添加了其他对象,Factory对象的调用方式仍然是相同的。显示博客条目就是显示中的一个实例。
不同对象的创建并不是使用工厂设计模式的唯一目的。使用基于工厂设计模式的类的另一个场合是处理若干项的集合。在这种情况下,对象集合包含相同的基对象,但是每个对象都具有不同的特征。
在需要若干步骤才能确定要创建的对象类型时,我们最好使用基于工厂设计模式的类来检索新的实例。
UML
该UML图详细说明了一个使用工厂设计模式的类设计。
下面是对上图的说明:
1.现存的两个基类是MyObjectTyepA和MyObjectTyepB。这两个雷都具有名为doSomething()的公共方法,该方法采用自己独特的方式执行具体对象的逻辑。两个基类的公共接口和返回类型是完全相同的。
2.MyObjectFactory类用于创建上述任意一个基类的实例并将其返回至代码流。它具有一个名为createObject()的公共方法,该方法接受参数type,这有助于判断应当创建哪一个基类的实例。随后,createObject()方法会返回被请求类型类的一个实例。
PHP设计模式工厂模式的使用实例
<?php /* * 每日练习 PHP设计模式工厂模式的使用方法 * PHP工厂模式不难理解,顾名思义,就是一个加工厂,然后工厂是制造产品的,只要制造产品 * 就必须有几个要素:"方法","模型","工厂车间"。 */ /*第一种示例 普通工厂模式 * */ abstract class model {//产品模型 abstract function getNames(); } class zhangsan extends model {//产品实例 function getNames(){ return "my name is zhengsan"; } } class lisi extends model{//产品实例 function getNames(){ return "my name is lisi"; } } abstract class gongchangModel {//工厂模型 abstract function getZhangsan(); abstract function getLisi(); } class gongchang extends gongchangModel{//工厂实例 function getZhangsan(){ return new zhangsan(); } function getLisi(){ return new lisi(); } } $gongchang=new gongchang();//实例化工厂 $zhangsan=$gongchang->getZhangsan();//制造产品 echo $zhangsan->getNames();//产品输出功能 ?>
之前我写去关于工厂设计模式的文章,实际上,工厂模式包含普通工厂模式和抽象工厂模式,但是,不管是什么工厂模式,它们都是有一个作用,那就是生成对象。
好了,那我们用下面最最简单的例子,再把PHP设计模式中的厂模式再演示一下。
我自己总结了一下,工厂模式的三个要素:
一、产品模型
二、产品实例
三、工厂车间
<?php abstract class prModel {//产品模型 abstract function link(); } class webLink extends prModel{//实例一个产品 public function link(){ echo "www.jb51.net"; } } class gongchang {//工厂 static public function createLink (){ return new webLink(); } } $weblink=gongchang::createLink();//通过工厂制造一个对象 $weblink->link();//输出 www.jb51.net ?>
Atas ialah kandungan terperinci PHP面向对象进阶设计模式:工厂模式使用实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!