开发过程当中,会遇到一些比较典型的场景,理解好这些典型场景,能够让我们在实现功能前,心中有框架,手上有工具,更好地开发产品。
一. 介绍
1.1 工厂模式就是要创建某种东西,“东西”可以理解为产品,这个产品和创建它的类不存在绑定关系,是一种松耦合。一般情况下,客户端会向工厂发出请求,由工厂创建所请求产品。当我们实例化对象的子类可能变化时,就要使用工厂模式。
创建对象的子类数目已知时,采用可预测方式制定数目。比如,开发世界地图时,不同对象表示七大洲,这就是数目固定的;
创建对象的子类数目未知时,程序必要要灵活。比如,统计图书馆中图书的类别时,可能会不断的发现有新的类别,或者之前的类别无法满足后续的需求,要被撤掉,要充分考虑到这种情况;
处理上面两种情况,此时就可以考虑使用工厂模式。
二.原理
实现的工厂方法类图
client类是隐含的
client类包含Creator 工厂接口的一个引用,用于请求图像或者文本产品。client类只负责发出请求,不实例化产品,由具体的工厂实例化所请求的产品对象。Creator负责在接收到请求后,指挥并下发这个请求到到具体的工厂类中,去实例化产品。
三.实现
3.1建立工厂:creator 接口
factoryMethod($countryProduct);
return $mfg;
}
}
factoryMethod 和doFactory 都需要参数,接口接收参数,创建并返回不同的产品对象。
3.2创建产品
3.2.1产品接口
产品接口,具体的产品对象必须有相同的接口。getProperties函数返回产品给客户。
3.2.2产品demo
countryTxt = file_get_contents('test.txt');
$this->formatHelper = new FormatHelper();
$this->mfgProduct = $this->formatHelper->addTop();
$this->mfgProduct.= <<
$this->countryTxt
KYRGYZSTAN;
;
$this->mfgProduct .= $this->formatHelper->closeUp();
return $this->mfgProduct;
}
}
产品中输出了一个图片,以及一段文本。这里面包含一个辅助类FormatHelper,负责公共的html标签处理。
3.3 辅助类FormatHelper
topper = "
Map Factory
";
return $this->topper;
}
public function closeUp(){
$this->bottom = "