首页 > 编程 > PHP > 正文

三种php工厂模式的简单介绍

2020-03-22 18:47:35
字体:
来源:转载
供稿:网友
在之前的文章中,我们为大家介绍了什么是PHP工厂模式,以及为什么要使用php工厂模式,今天我们详细介绍下php工厂模式的三种情况,通过实例具体分析!

工厂模式

实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
应用场景:众多子类并且会扩充、创建方法比较复杂。

工厂模式分为三种:简单工厂、工厂方法、抽象工厂 ,

三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。在分工时,核心工程师负责抽象工厂和抽象产品的定义,业务工程师负责具体工厂和具体产品的实现。只要抽象层设计的好,框架就是非常稳定的。

代码如下:

/** * 工厂模式 *///抽象产品interface Person {    html' target='_blank'>public function getName(); }//具体产品实现class Teacher implements Person {    function getName() {        return "老师n";    }}class Student implements Person {    function getName() {        return "学生n";    }}//简单工厂class SimpleFactory {       public static function getPerson($type) {              $person = null;              if ($type == 'teacher') {                     $person = new Teacher();              } elseif ($type == 'student') {                     $person = new Student();              }              return $person;       }}//简单工厂调用class SimpleClient {       function main() {              // 如果不用工厂模式,则需要提前指定具体类              // $person = new Teacher();              // echo $person->getName();              // $person = new Student();              // echo $person->getName();              // 用工厂模式,则不需要知道对象由什么类产生,交给工厂去决定              $person = SimpleFactory::getPerson('teacher');              echo $person->getName();              $person = SimpleFactory::getPerson('student');              echo $person->getName();       }}//工厂方法interface CommFactory {    public function getPerson();}//具体工厂实现class StudentFactory implements CommFactory {    function getPerson(){        return new Student();    }}class TeacherFactory implements CommFactory {    function getPerson() {        return new Teacher();    }}//工厂方法调用class CommClient {    static function main() {           $factory = new TeacherFactory();           echo $factory->getPerson()->getName();           $factory = new StudentFactory();           echo $factory->getPerson()->getName();    }}//抽象工厂模式另一条产品线interface Grade {       function getYear();}//另一条产品线的具体产品class Grade1 implements Grade {       public function getYear() {              return '2003级';       }}class Grade2 implements Grade {       public function getYear() {              return '2004级';       }}//抽象工厂interface AbstractFactory {       function getPerson();       function getGrade();}//具体工厂可以产生每个产品线的产品class Grade1TeacherFactory implements AbstractFactory {       public function getPerson() {              return new Teacher();       }       public function getGrade() {              return new Grade1();       }}class Grade1StudentFactory implements AbstractFactory {       public function getPerson() {              return new Student();       }       public function getGrade() {              return new Grade1();       }}class Grade2TeacherFactory implements AbstractFactory {       public function getPerson() {              return new Teacher();       }       public function getGrade() {              return new Grade2();       }}//抽象工厂调用class FactoryClient {       function printInfo($factory) {              echo $factory->getGrade()->getYear().$factory->getPerson()->getName();       }       function main() {              $client = new FactoryClient();              $factory = new Grade1TeacherFactory();              $client->printInfo($factory);              $factory = new Grade1StudentFactory();              $client->printInfo($factory);              $factory = new Grade2TeacherFactory();              $client->printInfo($factory);       }}//简单工厂//SimpleClient::main();//工厂方法//CommClient::main();//抽象工厂FactoryClient::main();

总结:

通过本文的示例详解小伙伴们了解了php工厂模式了吧,是不是挺简单呢,希望对你的工作有所帮助!

相关推荐:

什么是php工厂模式?为何要用php工厂模式?

PHP工厂模式的三种形式的示例代码详解

php工厂模式的使用实例总结

以上就是三种php工厂模式的简单介绍的详细内容,更多请关注 其它相关文章!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表