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;

}

}

?>

我们如果要实例化这个类就要这样:

1.$u = new User(‘小明‘,19);

一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。

突然我想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在我们想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:

1.$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();

时间: 2024-10-28 15:33:43

PHP工厂模式的好处的相关文章

OOAD之创建型模式之工厂模式

首先我们为什么要学习设计模式呢? 1)模式从经验中总结出来的,经过证实的方案,模式只有在实际系统中经过多次验证之后才能成为模式. 2) 提高系统的可维护性, 通过使用设计模式,在系统面临升级和维护时,将把维护成本控制在最低的水平上. 3) 增加表达能力: 设计模式有很强的语言表述性. 设计模式是对解决方案的总结,使得设计模式能够更好的传达和交流,成为开发人员之间的一种共通语言,从而被更多的开发人员使用,反过来促进设计模式的发展和应用. 4)帮助我们更好的进行软件设计. 1 模式的概念:是具有代表

抽象工厂模式(转)

转自 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择CPU的时候,面临一系列的问题,比如品牌.型号.针脚数目.主频等问题,只有把这些问题都确定下来,才能确定具体的CPU. 同样,在选择主板的时候,也有一系列问题

抽象工厂模式(Abstract Factory)C#实例

抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 本实例描述了抽象工厂模式的一个使用场景.在动物世界弱肉强食,食肉动物会吃掉食草动物.这是动物世界的规律,因此在动物世界类中有Runfoodchain(运行食物链)方法.在动物世界里总是有食肉动物和食草动物这两个抽象成员.它们之所以是抽象成员是因为他们不是具体的一种动物.而食草动物与食肉动物的区别在

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造

《JAVA与模式》之抽象工厂模式

场景问题 举个生活中常见的例子--组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择CPU的时候,面临一系列的问题,比如品牌.型号.针脚数目.主频等问题,只有把这些问题都确定下来,才能确定具体的CPU. 同样,在选择主板的时候,也有一系列问题,比如品牌.芯片组.集成芯片.总线频率等问题,也只有这些都确定了,才能确定具体的主板. 选择不同的CPU和主板,是每个客户在组装电脑的时候,向

spring学习之工厂模式

1.设计模式是一套反复使用,多数人知晓,经过分类.代码设计的经验总结. 2.工厂模式的定义:为创建一组相关或者相互依赖的对象提供一个接口,而无需指定他们的具体实现类. 3.工厂模式的适用性 (1)有一组类似的对象需要创建; (2)系统需要考虑扩展性. 4.工厂模式的三个角色 (1)抽象产品(接口) (2)具体产品(实现类) (3)生产者(工厂类) 其中concreteProduct是具体产品,product是抽象产品,creator是生产者. 5.工厂模式的好处: 提供好的灵活性和代码复用性,代

浅析JAVA设计模式之工厂模式(三)

在阅读本文之前,请先阅读(一)和(二)中的简单工厂模式和工厂方法模式. 1抽象工厂模式简介 抽象工厂 (Abstract Factroy) 模式:工具箱模式(kit).抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,如下图. 图1.1 上图左边有一个工厂类的等级结构,右边有两个不同的产品等级结构,分别是产品A的等级结构和产品B的等级结构,工厂1和工厂2分别负责不同一个产品等级,同一个产品族的产品的生产.又例如下图: 图1.2 上图表示的是Button和Text两个不同产品的等级

设计模式(二)工厂模式Factory (创建型)

工厂模式分为三种:简单工厂模式 (Simple Factory) .工厂方法模式(Factory Method).抽象工厂模式(Abstract Factory) //举例:发送邮件和短信的例子 /** * @author Administrator * 产品类 */interface Sender{ void send();}class MailSender implements Sender{ @Override public void send() { System.out.println

23中设计模式----------工厂模式.

女娲造人故事开头(借由设计模式之禅): 第一次烤泥人,感觉应该熟了,往大地一放,哇,没烤熟!于是白人诞生了!(这也是缺乏经验的最好证明) 第二次烤泥人,上一次没烤熟,这一次多烤一会,放到世间一看,嘿,烤过头了,于是黑人诞生了! 第三次烤泥人,一边烤一边察看,直到表皮嫩黄,嘿,真正好,于是黄色人种出现了! 言归正传,所谓的工厂模式,要从工厂说起,工厂就是制造生产东西的,所以,也很容易知道工厂模式就是,利用工厂生产对象.所以,工厂模式,要有工厂和需要生产的产品. 工厂模式的好处就在于,不需要知道对象