### 工厂模式:

由工厂类根据参数来决定创建出哪一种产品类的实例。工厂类是指包含了一个专门用来创建其他对象的方法的类。所谓按需分配,传入参数进行选择,返回具体的类。工厂模式的最主要作用就是对象创建的封装、简化创建对象操作。 简单的说,就是调用工厂类的一个方法(传入参数)来得到需要的类;

优点

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

缺点

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

<?php
class Factory
{public static function create_obj($type){switch($type){case 'A':$obj =  new Company_A();break;case 'B':$obj = new Company_B();break;case 'C':$obj = new Company_C();break;}return $obj;}}/*** 公司接口类* Interface Company*/
interface Company{public function add($username);//添加员工public function del($username);//删除员工public function edit($username);//修改员工}/*** A 公司* Class Company_A*/
class  Company_A implements Company
{public function add($username){echo $username.'is add into A</br>';}public function del($username){// TODO: Implement del() method.}public function edit($username){// TODO: Implement edit() method.}}/*** B公司* Class Company_B*/
class  Company_B implements Company
{public function add($username){echo $username.'is add into B</br>';}public function del($username){// TODO: Implement del() method.}public function edit($username){// TODO: Implement edit() method.}}/*** C公司* Class Company_C*/
class  Company_C implements Company
{public function add($username){echo $username.'is add into C</br>';}public function del($username){// TODO: Implement del() method.}public function edit($username){// TODO: Implement edit() method.}}$type = 'A';$company = Factory::create_obj($type);$company->add('赵信');$type = 'B';$company = Factory::create_obj($type);$company->add('德玛');
$type = 'C';$company = Factory::create_obj($type);$company->add('皇子');

上面代码片段将会输出结果:

PHP 设计模式之工厂模式 (静态工厂模式)相关推荐

  1. 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式

    设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...

  2. 简单工厂(静态工厂)

    文章目录 简单工厂(静态工厂) 示例 使用典范 简单工厂(静态工厂) 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,不属于GOF23种设计模式 适用场景: 工厂类负责创建的对象比较少 ...

  3. java工厂模式静态工厂_Java设计模式之静态工厂模式详解

    本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角 ...

  4. php 工厂静态类,静态工厂模式(Static Factory)

    1.9.1. 目的 与抽象工厂模式类似,此模式用于创建一系列相关或相互依赖的对象. 『静态工厂模式』与『抽象工厂模式』的区别在于,只使用一个静态方法来创建所有类型对象, 此方法通常被命名为 facto ...

  5. 简单工厂模式(静态工厂模式)

    简单工厂模式 工厂方法模式可以缩小为简单工厂模式(静态工厂模式). 工厂方法模式: 简单工厂模式: 去掉了一个抽象的工厂类.而且一般情况下简单工厂类的create()方法是静态方法. 举个与工厂方法模 ...

  6. spring:动态工厂,静态工厂

    Bean的装配之动态工厂方式 (1) 如何理解Bean的装配? Bean的装配即bean(类对象)的装配 (2) 动态工厂方式创建Bean的步骤有哪些? ① 注册工厂 <!--使用Factory ...

  7. JAVA设计模式-创建模式-工厂模式-简单工厂模式/静态工厂模式

    简单工厂模式Simple Factory 为什么要有设计模式? 简单工厂模式的类图 简单工厂模式的例子 产品 生产者 消费者 执行结果 后记 鸣谢 为什么要有设计模式? 一个有价值的系统总是会因为需求 ...

  8. 设计模式之——简单(静态)工厂模式和抽象工厂模式

    文章目录 [关于设计模式] 设计模式的诞生 设计模式概念与解读 设计模式的原则 [关于工厂模式] 简单工厂(静态工厂)模式的概念 抽象工厂模式 工厂模式的使用时机和注意事项 给自己的思考 [关于设计模 ...

  9. 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库

    文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...

最新文章

  1. xmind修改默认配置
  2. python中循环迭代语句_python条件与循环-循环
  3. 下图为双总线结构机器的数据通路_PDPS机器人虚拟调试 弧焊仿真 第一课 弧焊项目创建...
  4. CentOS 7 防止端口自动关闭
  5. 支付宝新版SDK-PC扫码支付-手机浏览器H5支付
  6. bash 不是内部或外部命令_Win10_cmd下提示:‘xxx’不是内部或外部命令,也不是可运行的程序 或批处理文件...
  7. 使用jemalloc优化java_Jemalloc优化MySQL和Nginx
  8. gettype获取类名_在TypeScript中运行时获取对象的类名
  9. 如何更好地优化大数据分析
  10. jdk6或者7Base64转码与解码
  11. clip_gradient_norms()
  12. 利用计算机模拟人脑进行演绎推理,2014年4月全国自学考试计算机应用技术试题...
  13. 【arduino 问题记录】 psram: PSRAM ID read error: 0xffffffff
  14. 无线破解攻击工具使用详解
  15. 计算体脂率,并给出评价
  16. 三星android+l,全键盘+安卓4.0 三星GALAXY M Pro回归
  17. Windows10 中的字母映射表
  18. 设计UI的语言——XAML
  19. window下创建mysql 库
  20. win10非分页缓冲池占用过大的解决方法

热门文章

  1. redis 应用场景和数据类型
  2. CentOS中一些基本的操作记录
  3. js部分---表单验证;(含正则表达式)
  4. poj 1324 Holedox Moving
  5. 软件工程小组第六次会议记录
  6. 直播和VR的代入感太强,淘宝也忍不住推出了VR直播
  7. js获取url,截取url参数,截取url后文件名
  8. eclipse工具的使用心得
  9. PeopleTools 8.54 first install note
  10. 关于QQ的几点改进建议