继续我们所说的 简单工厂模式 。将制造者类与要生产的产品类分离开来,由制造者的子类来执行实例化。
<?php
/**
* 预约编码器
* Class AppEncoder
*/
abstract class AppEncoder{
abstract function encode();
}
/**
* Bloggs的编码格式
* 产品类
* Class BloggsAppEncoder
*/
class BloggsAppEncoder extends AppEncoder {
function encode()
{
return 'BloggsCal的格式';
}
}
/**
* 通讯消息
* 制造者类
* Class CommsManager
*/
abstract class CommsManager{
abstract function getHeaderText();
abstract function getAppEncoder();
abstract function getFooterText();
}
/**
* Bloggs通讯消息
* 制造者类
* Class BloggsCommsManager
*/
class BloggsCommsManager extends CommsManager {
function getHeaderText(){
return "BloggsCal header";
}
function getAppEncoder(){
return new BloggsAppEncoder();
}
function getFooterText(){
return "BloggsCal footer";
}
}
$Bloggs = new BloggsCommsManager();
print_r($Bloggs->getAppEncoder()->encode().'<br/>');
print_r($Bloggs->getHeaderText());
现在我们的制造者类与产品的层次结构是非常相似的,这是使用工厂方法模式的常见结构,这形成了一种特殊的代码重复。如果我们现在需要其他的编码格式通讯,只需要添加对应的编码格式对应的通讯消息。
在上面的示例中我们只关注AppEncoder预约的功能。如果我们想要扩展一下功能,使其能够处理代办事宜及联系人,我们就需要一个可以同时处理一组相关实例的架构。
我们在 抽象工厂模式 中将看到,工厂方法模式和抽象工厂模式一起使用。