互联网程序设计·PHP语言设计模式之工厂模式
第1关 简单工厂
<?php
// 表示鼠标,所有鼠标都应该实现此接口
interface IMouse
{
// 获取厂商的名称
public function GetFirmName();
}
// 惠普品牌的鼠标
class HPMouse implements IMouse
{
// 获取鼠标厂商的名字(也就是惠普)
public function GetFirmName()
{
echo "惠普\n";
}
}
// 微软品牌的鼠标
class MicroMouse implements IMouse
{
public function GetFirmName()
{
//获取鼠标厂商的名字(也就是微软)
/********** Begin **********/
echo "微软\n";
/********** End **********/
}
}
// A品牌的鼠标
class AMouse implements IMouse
{
public function GetFirmName()
{
//获取鼠标厂商的名字(也就是A)
/********** Begin **********/
echo "A\n";
/********** End **********/
}
}
// 鼠标工厂
class MouseFactory
{
//根据传入的厂商名称实例化鼠标
static function GetMouse(string $firmName) : IMouse
{
if($firmName == '惠普')
{
return new HPMouse();
}
/********** Begin **********/
else if($firmName == '微软'){
return new MicroMouse();
}else if($firmName == 'A'){
return new AMouse();
}
/********** End **********/
throw new Exception('无此厂商');
}
}
第2关 工厂方法
<?php
// 表示鼠标,所有鼠标都应该实现此类
interface IMouse
{
// 获取厂商的名称
public function GetFirmName();
}
// 抽象出鼠标工厂的接口
interface IMouseFactory
{
// 返回的类型必须实现IMouse接口
public function GetMouse() : IMouse;
}
//惠普品牌的鼠标
class HPMouse implements IMouse
{
// 获取鼠标厂商的名字(也就是惠普)
public function GetFirmName()
{
echo "惠普\n";
}
}
// 微软品牌的鼠标
class MicroMouse implements IMouse
{
// 获取鼠标厂商的名字(也就是微软)
public function GetFirmName()
{
echo "微软\n";
}
}
//A品牌的鼠标
class AMouse implements IMouse
{
// 获取鼠标厂商的名字(也就是A)
public function GetFirmName()
{
echo "A\n";
}
}
class HPFactory implements IMouseFactory
{
// 返回的类型必须实现IMouse接口
public function GetMouse(): IMouse
{
return new HPMouse();
}
}
/********** Begin **********/
//必须继承自 IMouseFactory
class MicroFactory implements IMouseFactory
{
public function GetMouse(): IMouse
{
return new MicroMouse();
}
}
/********** End **********/
/********** Begin **********/
//必须继承自 IMouseFactory
class AFactory implements IMouseFactory
{
public function GetMouse(): IMouse
{
return new AMouse();
}
}
/********** End **********/
第3关 抽象工厂
<?php
// 表示鼠标,所有鼠标都应该实现此接口
interface IMouse
{
// 获取厂商的名称
public function GetFirmName();
}
// 表示键盘,所有键盘都应该实现此接口
interface IKeyboard
{
public function GetFirmName();
}
// 抽象出工厂的接口
interface IFactory
{
// 返回的类型必须实现 IMouse 接口
public function GetMouse() : IMouse;
// 返回的类型必须实现 IKeyboard 接口
public function GetKeyboard() : IKeyboard;
}
// 惠普品牌的鼠标
class HPMouse implements IMouse
{
// 获取鼠标厂商的名字(也就是惠普)
public function GetFirmName()
{
echo "惠普\n";
}
}
// 微软品牌的鼠标
class MicroMouse implements IMouse
{
//获取鼠标厂商的名字(也就是微软)
public function GetFirmName()
{
echo "微软\n";
}
}
// A品牌的鼠标
class AMouse implements IMouse
{
// 获取鼠标厂商的名字(也就是A)
public function GetFirmName()
{
echo "A\n";
}
}
// 惠普品牌的键盘
class HPKeyboard implements IKeyboard
{
// 获取厂商的名字(也就是惠普)
public function GetFirmName()
{
echo "惠普\n";
}
}
/********** Begin **********/
// 微软品牌的键盘
class MicroKeyboard implements IKeyboard
{
// 获取厂商的名字(也就是惠普)
public function GetFirmName()
{
echo "微软\n";
}
}
/********** End **********/
/********** Begin **********/
//A品牌的键盘
class AKeyboard implements IKeyboard
{
public function GetFirmName()
{
echo "A\n";
}
}
/********** End **********/
class HPFactory implements IFactory
{
// 返回的类型必须实现IMouse接口
public function GetMouse(): IMouse
{
return new HPMouse();
}
// 返回的类型必须实现 IKeyboard 接口
public function GetKeyboard(): IKeyboard
{
return new HPKeyboard();
}
}
// 必须继承自 IFactory
class MicroFactory implements IFactory
{
// 返回的类型必须实现IMouse接口
public function GetMouse(): IMouse
{
return new MicroMouse();
}
/********** Begin **********/
//实现获取键盘的逻辑
public function GetKeyboard() : IKeyboard
{
return new MicroKeyboard();
}
/********** End **********/
}
// 必须继承自 IFactory
class AFactory implements IFactory
{
// 返回的类型必须实现IMouse接口
public function GetMouse(): IMouse
{
return new AMouse();
}
/********** Begin **********/
// 实现获取键盘的逻辑
public function GetKeyboard() : IKeyboard
{
return new AKeyboard();
}
/********** End **********/
}
813 Views