解析PHP工厂模式的好处

顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解
一般我们实例化一个类会给它一些参数以便在其构析的时候可以根据不同的参数反馈出我们需要的结果。
举例说明,以下是一个User类,非常简单:


代码如下:

<?php
interface IUser{
   function getName();
   function getAge();
}
class User implements IUser{
   protected $_name;
   protected $_age;
   function __construct($name, $age){
      $this->_name = $name;
      $this->_age = (int)$age;
   }
   function getName(){
      return $this->_name;
   }
  function getAge(){
      return $this->_age;
   }
}
?>

我们如果要实例化这个类就要这样:
$u = new User(‘小明‘,19);
一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。
突然我想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在我们想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:
$u = new User(‘小明‘,19,‘学生‘);
当然我们也可以通过在__construct函数中进行默认值设置来避免这种重复劳动,但事实上从代码优雅角度来说这样很不好,设想我们有一个工厂方法可以通过一个标识来对应一组参数,并把这个参数存放在某个文本文档或是直接以数组的形式存放在工厂类中,我们在调用User类的时候就会变的轻松许多,即便是需要增减参数属性也不需要到处进行代码的替换,下面就是一个工厂类(也可以直接将方法存放在User类)


代码如下:

interface IUser{
    function getName();
    function getAge();
}
class User implements IUser{
   protected $_group;
   protected $_name;
   protected $_age;
  function __construct($name, $age, $group){
      $this->_group = $group;
      $this->_name = $name;
      $this->_age = (int)$age;
  }
  function getName(){
     return $this->_name;
  }
  function getAge(){
      return $this->_age;
  }
}
class Fuser{
   private static $group = array(
       array(‘小明‘,19,‘学生‘),
       array(‘小王‘,19,‘学生‘)
   );
   static function create($id){
      list($name, $age, $group) = self::$group[(int)$id];
      return new User($name, $age, $group);
   }
}
echo Fuser::create(0)->getName();

得到的结果应该是输出“小明”。

(0)

相关推荐

  • 介绍php设计模式中的工厂模式

    问题 你如何能轻松方便地建立这么" 复杂 " 的对象即操作中不需要粘贴复制呢? 解决方法 建立一个工厂(一个函数或一个类方法)来制造新的对象.为了理解工厂的用处, 试想以下的不同之处-- 代码: 复制代码 代码如下: $connection =& new MySqlConnection($user, $password, $database); --使你的代码可扩展和更简洁-- 复制代码 代码如下: $connection =& create_connection();

  • PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式

    毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 单例模式 当需要保证某个对象只能有一个实例的时候,单例模式非常有用.它把创建对象的控制权委托到一个单一的点上,任何时候应用程序都只会仅有一个实例存在.单例类不应该可以在类的外部进行实例化一个单例类应该具备以下几个要素. 必须拥有一个访问级别为 private 的构造函数,有效防止类被随意实例化. 必须拥有一个保存类的实例的静态变量. 必须拥有一个访问这个实例的公共的静态

  • PHP中“简单工厂模式”实例代码讲解

    简单工厂模式: ①抽象基类:类中定义抽象一些方法,用以在子类中实现 ②继承自抽象基类的子类:实现基类中的抽象方法 ③工厂类:用以实例化对象 看完文章再回头来看下这张图,效果会比较好 采用封装方式 复制代码 代码如下: <?php class Calc{ /** * 计算结果 * * @param int|float $num1 * @param int|float $num2 * @param string $operator * @return int|float */ public func

  • PHP高级对象构建 工厂模式的使用

    PHP设计模式工厂模式的使用方法 复制代码 代码如下: <?php /* * 每日练习 PHP设计模式工厂模式的使用方法 * PHP工厂模式不难理解,顾名思义,就是一个加工厂,然后工厂是制造产品的,只要制造产品 * 就必须有几个要素:"方法","模型","工厂车间". */ /*第一种示例 普通工厂模式 * */ abstract class model {//产品模型 abstract function getNames(); } cla

  • php设计模式 Factory(工厂模式)

    复制代码 代码如下: <?php /** * 工厂方法模式 * * 定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使用一个类的实例化延迟到其子类 */ /* class DBFactory { public static function create($type) { swtich($type) { case "Mysql": return new MysqlDB(); break; case "Postgre": return new Postg

  • 浅析php工厂模式

    本系列文章来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式. 设计模式的一般介绍在第一篇文章讲了,这里就不重复. 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类. 应用场景:众多子类并且会扩充.创建方法比较复杂. 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 , 三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化.而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样.但本质是,简单工

  • PHP最常用的2种设计模式工厂模式和单例模式介绍

    1.工厂模式 主要作用是降低耦合度. 复制代码 代码如下: abstract class Operation{ abstract public function getValue($num1,$num2); public function getAttr(){ return 1; } } class Add extends Operation{ public function getValue($num1, $num2){ return $num1+$num2; } } class Sub ex

  • PHP 工厂模式使用方法

    基本的工厂类 复制代码 代码如下: class MyObject{ //对象将从工厂返回 } class MyFactory{ public static function factory(){ return new MyObject(): } } $instance=MyFactory::factory(); 使用工厂类解析图像文件 复制代码 代码如下: <?php interface IImage{ function getHeight(); function getWidth(); fun

  • php 设计模式之 工厂模式

    本人常用mysql数据库,所以程序只写了mysql的数据库操作类.希望各位高手把另外的类写全,最好能发一份给我. db_mysql.php继承db.php接口,具体实现数据库操作的各种方法 ,如果你确定你的数据库平台不会变的话不用工厂类,直接用这个就行了. 复制代码 代码如下: <?php /** * @author 黄建文 * @version V1.0 * @email hjwtp2005@qq.com * @data 2008-12-16 * =======================

  • 解析PHP工厂模式的好处

    顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解一般我们实例化一个类会给它一些参数以便在其构析的时候可以根据不同的参数反馈出我们需要的结果.举例说明,以下是一个User类,非常简单: 复制代码 代码如下: <?phpinterface IUser{   function getName();   function getAge();}class User im

  • 使用简单工厂模式来进行Python的设计模式编程

    计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通过一个工厂来决定创建哪种具体的产品实例. 下面是一个简单的工厂实例: def create_animal(name): if name == 'dog': return Dog() elif name == 'cat': return Cat() animal = create_animal('dog

  • PHP工厂模式、单例模式与注册树模式实例详解

    本文实例讲述了PHP工厂模式.单例模式与注册树模式.分享给大家供大家参考,具体如下: 三种基本设计模式 1.工厂模式:工厂方法或者类生成对象,而不是在代码中直接new 2.单例模式:使某个类的对象仅允许创建一个 3.注册模式:全局共享和交换对象 工厂模式: <?php namespace IMooc; class Factory { static function createDatabase() { $db = new Database(); return $db; } } $db = IMo

  • Java设计者模式简单工厂模式解析

    简介 简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式. 简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例. 简单工厂模式是一种对象创建型模式但是简单工厂模式不属于23种Gof设计模式之一. 实例 如何实现一个具有加减乘除基本功能的计算器? 对于这四种运算来说,都需要两个操作数,差别仅在于返回的结果不同. 由此,我们可以抽象化它们的共性,提炼出一个父类.这个类中包含两个操作数,一个返回结果方法,这个方法

  • 解析iOS应用开发中对设计模式中的抽象工厂模式的实现

    概述 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构.那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式.这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品. 通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构中的多个产品族中的产品对象的创建问题.如下图所示: 根据产品角色的结构图,就不难给出工厂角色的结构设计图. 可以

  • 实例解析Java单例模式编程中对抽象工厂模式的运用

    定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 类型:创建类模式 类图: 抽象工厂模式与工厂方法模式的区别         抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象.他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式则是针对的多个产品等级结构.在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同

  • 实例解析C++设计模式编程中简单工厂模式的采用

    简单工厂模式中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.它又称为静态工厂方法模式,属于类的创建型模式. 简单工厂模式的UML类图 简单工厂模式的程序通过封装继承来降低程序的耦合度,设计模式使得程序更加的灵活,易修该,易于复用. 简单工厂是在工厂类中做判断,从而创造相应的产品. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.   该模式中包含的角色及其职责   1.工厂(Creator)角色  

  • javascript工厂模式和构造函数模式创建对象方法解析

    工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName

  • 实例解析C#设计模式编程中简单工厂模式的使用

    简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用"new"关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一的问题,该原则就是--封装改变,既然要封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封

  • JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)

    什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现.   工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlo

随机推荐