php教程自学网 - 轻松零基础学php视频教程
条幅广告
当前位置: 主页 > PHP学堂 >

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

时间:2019-07-17 16:52来源:未知 作者:admin 点击:
在之前的文章中,我们为大家介绍了什么是PHP工厂模式,以及为什么要使用php工厂模式,今天我们详细介绍下php工厂模式的三种情况,通过实例具体分析! 工厂模式 实现:定义一个用
在之前的文章中,我们为大家介绍了什么是PHP工厂模式,以及为什么要使用php工厂模式,今天我们详细介绍下php工厂模式的三种情况,通过实例具体分析!
工厂模式
 
实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
应用场景:众多子类并且会扩充、创建方法比较复杂。
 
工厂模式分为三种:简单工厂、工厂方法、抽象工厂 ,
 
三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。在分工时,核心工程师负责抽象工厂和抽象产品的定义,业务工程师负责具体工厂和具体产品的实现。只要抽象层设计的好,框架就是非常稳定的。
 
代码如下:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
 
 * 工厂模式
 
 */
 
//抽象产品
 
interface Person {
 
    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工厂模式了吧,是不是挺简单呢,希望对你的工作有所帮助!
(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关推荐
  • PHP学习进程
  • 做为一个php痴迷者,我一直想整理一份系列学习php的计划。下面是我学习php进程

  • PHP手册阅读笔记
  • 学习PHP以来一直希望有时间能够有时间通读PHP手册,最近终于强迫自己划出一些

  • phphome网站管理系统
  • PhpHome非常适合用来建立资讯类网站,比如政府、高校、行业门户和地区门户等

  • PHPCUSTOM集成环境介绍
  • PHPCUSTOM是windows系统下运行的完全绿色的PHP集成开发环境,是目前最便捷也是最

  • PHP生成奖状
  • ob_clean(); $realname = 姓名:最闲的码农; $schoolname = 社区:Laravel; $image = imagecreatefro

  • PHP-FPM与Nginx的通信机制总结
  • PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要

  • PHP基础入门(一)---世界上最好用的编程语言
  • 作为一名程序员,我们应该都听过这样一个梗:PHP编程语言,是世界上最好用的

  • php随机数
  • rand()函数用户获取随机数,具体用法如下: rand()可以设置0个参数或者两个参数

  • php多线程实现
  • 多线程 线程 首先说下线程: 线程(thread) 是操作系统能够进行运算调度的最小单

  • 几种php实现定时任务的思路
  • PHP本身是没有定时功能的,PHP也不能多线程。PHP的定时任务功能必须通过和其他

猜你喜欢