设计模式入门系列
在我的理解中,抽象工厂模式更像是在工厂方法模式基础上增加了一层。工厂方法模式解决了创建不同的类的问题,抽象工厂模式解决了创建一组相关的类的问题。
以下面的代码为例:当客户端在获取一个Conuntry类的时候,还希望能够获取与该Country相关的language类。抽象工厂中包含两个相关类的实现方式,相当于通过抽象工厂描述了这种相关性。
<?php
interface Language
{
public function say();
}
class Chinese implements Language
{
public function say()
{
echo "这是中文";
}
}
class English implements Language
{
public function say()
{
echo "This is English";
}
}
interface Country
{
public function getCapital();
}
class China implements Country
{
public function getCapital()
{
echo "北京";
}
}
class USA implements Country
{
public function getCapital()
{
echo "WashingtonDC.";
}
}
abstract class Factory
{
abstract function getCountry();
abstract function getLanguage();
}
class ChinaFactory extends Factory
{
public function getCountry()
{
return new China();
}
public function getLanguage()
{
return new Chinese();
}
}
class USAFactory extends Factory
{
public function getCountry()
{
return new USA();
}
public function getLanguage()
{
return new English();
}
}