工厂模式代码如下:
<?php
interface IUser
{
function getName();
}class User implements IUser
{
public function __construct( $id ) { } public function getName()
{
return "Jack";
}
}class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
?>感觉 $uo 在执行的过程中,并没有涉及到接口 IUser 啊
为什么前面要加个这个啊?
interface IUser
{
function getName();
}
而且为什么 class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}
为什么这个方法要用static
<?php
interface IUser
{
function getName();
}class User implements IUser
{
public function __construct( $id ) { } public function getName()
{
return "Jack";
}
}class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
?>感觉 $uo 在执行的过程中,并没有涉及到接口 IUser 啊
为什么前面要加个这个啊?
interface IUser
{
function getName();
}
而且为什么 class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}
为什么这个方法要用static
相当于执行了UserFactory里的Create
在Create中式返回的User
也就是创建了User对象$uo = UserFactory::Create( 1 );
也就是楼上说的:相当于$uo= new User(1)
$uo->getName() 自然就可以调用了
UserFactory::主要是static方法调用
既然是返回对象 就可以直接返回 不需要再次创建UserFactory对象
在定义类 User 时声明了要实现接口 IUser
换句话说,在 User 类中,必须要定义接口 IUser 中的方法
这要就可以达到防止忘记定义方法 getName 时造成的运行时刻错误方法被声明为 static (静态)时,等同于一个函数(为该类所有实例共有)。可以节省空间
interface IUser
{
function getName();
}
为什么要弄个接口 来实现它??
别因为模式而拖累了正确的学习方向, 那些模式生产归根到底是强类型语言不能随便引用, 调用, 赋值而造成的, 在java里或者很需要, 但php不是
这个接口不是 工厂模式必须的,
工厂模式的关键在于下面那部分用::create代替了new你看一些别的例子就明白了