为啥要是用工厂方法

为啥需要工厂方法去获取对象,不直接new呢。

阅读 3.2k
5 个回答

当new一个对象需要付出比较大的代价的时候(比如构造方法有20个参数,之后还需要调用40个setXXX的方法),如果有一个工厂帮我们搞定这些操作那就再合适不过了。

就像我想吃汉堡,我会去麦当劳(工厂)买一个,麦当劳帮我搞定了养鸡种生菜到加热打包这些麻烦事。缺点是你想吃企鹅肉汉堡的话,你得自己去做(new一个)或者打入M记内部(修改工厂实现)才行。

看需求了,有些需求就适合工厂模式

工厂方法去获取对象,在要换个实例化的对象时只要改工厂类里new的一处就好了,如果不是工厂 就要每个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();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题