为啥需要工厂方法去获取对象,不直接new呢。
直接上一个简单工厂方法案例看一下哈,通过代码解释
补充一下,题主问题打的标签是java,以下是php代码,天下代码是一家
// 定义一个接口
interface Person
{
public function getWork();
}
// 实现该接口
class Teacher implements Person
{
public function getWork()
{
echo 'Teacher teaching';
}
}
class Student implements Person
{
public function getWork()
{
echo 'Student study';
}
}
// 此处为核心点
class Factory
{
/*
通过静态方法返回生成的指定类的对象
按照我们的理解,实例化对象需要 new 类名
如 $test = new Test;
$test->方法名();
再实例化一个:
$test2 = new Test2;
$test2->方法名();
......
实例化一次就需要再new一次类
而通过此处的简单工厂模式,则可以不需要知道具体的类名就可以生成对象
*/
public static function getPerson($work)
{
return new $work;
}
}
$res = Factory::getPerson('Teacher');
$res->getWork();
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答1.8k 阅读
2 回答768 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
当new一个对象需要付出比较大的代价的时候(比如构造方法有20个参数,之后还需要调用40个setXXX的方法),如果有一个工厂帮我们搞定这些操作那就再合适不过了。
就像我想吃汉堡,我会去麦当劳(工厂)买一个,麦当劳帮我搞定了养鸡种生菜到加热打包这些麻烦事。缺点是你想吃企鹅肉汉堡的话,你得自己去做(new一个)或者打入M记内部(修改工厂实现)才行。