在大型应用中,我们很可能需要工厂来生产一组相关的类,抽象工厂模式就闪亮登场了。在大型应用中,我们很可能需要工厂来生产一组相关的类,抽象工厂模式就闪亮登场了。
<?php
/**
* 预约编码器
* Class ApptEncoder
*/
abstract class ApptEncoder{
abstract function encode();
}
/**
* 待办事宜编码器
* Class TtdEncoder
*/
abstract class TtdEncoder{
abstract function encode();
}
/**
* 联系人编码器
* Class ContactEncoder
*/
abstract class ContactEncoder{
abstract function encode();
}
/**
* Bloggs的编码格式的预约
* Class BloggsApptEncoder
*/
class BloggsApptEncoder extends ApptEncoder {
function encode()
{
return 'BloggsCal的格式';
}
}
/**
* Bloggs的编码格式的待办事宜
* Class BloggsTtdEncoder
*/
class BloggsTtdEncoder extends TtdEncoder {
function encode()
{
return 'BloggsTtd的格式';
}
}
/**
* Bloggs的编码格式的联系人
* Class BloggsContactEncoder
*/
class BloggsContactEncoder extends ContactEncoder {
function encode()
{
return 'BloggsContact的格式';
}
}
/**
* 通讯消息
* Class CommsManager
*/
abstract class CommsManager{
const APPT = 1;
const TTD = 2;
const CONTACT = 3;
abstract function getHeaderText();
abstract function make($flag_int);
abstract function getFooterText();
}
/**
* Bloggs通讯消息
* Class BloggsCommsManager
*/
class BloggsCommsManager extends CommsManager {
function getHeaderText(){
return "BloggsCal header";
}
function make($flag_int){
switch ($flag_int){
case self::APPT:
return new BloggsApptEncoder;
case self::TTD:
return new BloggsTtdEncoder;
case self::CONTACT:
return new BloggsContactEncoder();
}
}
function getFooterText(){
return "BloggsCal footer";
}
}
添加编码格式来使此结构横向增长,添加编码器则是纵向增长。添加编码格式来使此结构横向增长,添加编码器则是纵向增长。
为了使类的接口变得更加紧凑,我们引用了make方法。