引言
 
  所属:创建型模式,常用设计模式之一
  工厂模式分为:简单工厂模式、工厂方法模式、静态工厂模式、抽象工厂模式。
  下面为简单工厂模式。
   参考资料:
    • 《大话设计模式》程杰
 
模式概述
 
  简单工厂模式是由一个工厂类决定创建出哪一种产品类的实例
  
  其中有两个关键字,工厂类、产品类。
 
  下面举个例子解释这两个关键词。
 
举个栗子
 
    程序代码中应用缓存,暂时考虑用Memcached,之后可能会换Redis,程序如何设计。
  
    解决的问题:
      
      假设程序设计使用Memcached,每一次的代码肯定是 new Memcaced ; 如果因为项目扩展要更换为Redis,必然很多代码都要改。
 
    流程图如下:
      
          

    
    产品类:其中Memcached和Redis是产品类,暂时举例两个产品类,可能会有很多个。

    工厂类:声明一个公共类,由该类指定使用哪个产品,这样就不需要改动【调用层】代码内容。

    看到这个图是不是对关键词清晰很多了。

    我们要做什么:

      让工厂类【公共类】来选择调用哪个具体产品

    
程序设计代码:
 
入口文件:index.php
<?php
// 自动加载
spl_autoload_register(function ($class) {
$file = __DIR__ . '/' . $class . '.php';
require_once($file);
}); $mode = Cache::cacheMode('Redis'); // 调用工厂类(缓存公共类)
$mode->getName();

公共缓存文件 Cache.php

<?php
namespace factory; /**
* 缓存公共方法
**/
class Cache
{
public static function cacheMode($type)
{
switch ($type) {
case 'Redis':
return new RedisMode();
break;
case 'Memca';
return new MemcachedMode();
break;
default:
return false;
break;
}
}
}

Redis类:RedisMode.php

<?php

class RedisMode
{
public function getName()
{
echo '我是Redis';
}
}

Memcached类:MemcachedMode.php

<?php

class MemcachedMode
{
public function getName()
{
echo '我是Memcached';
}
}
 
以下为源码地址

  

  GitHub源码地址:https://github.com/xiaobaoword/design_pattern/tree/master

总结

  

  优点:

    1. 一个调用者想创建一个对象,只要知道其名称就可以了。

    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

    3、屏蔽产品的具体实现,调用者只关心产品的接口。

  缺点:

    1. 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

    2. 违背了设计模式的原则【开放封闭】原则

      开放封闭:一个类,应该是可扩展的,而不可修改的。

  之后,工厂方法模式应运而生,请看下章。

「PHP」简单工厂模式的更多相关文章

  1. 「PHP」抽象工厂模式

    引言   所属:创建型模式,常用设计模式之一 参考资料: <大话设计模式>程杰   模式概述    官方定义:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或互相 ...

  2. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  3. C#设计模式之简单工厂模式(Simple Factory)

    1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...

  4. 设计模式 — 简单工厂模式(Simple Factory)

    定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类. 模式类型:创建型模型 Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑:工厂类可以 ...

  5. C#设计模式(2)——简单工厂模式

    一.概念:简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创 ...

  6. 设计模式之简单工厂模式Simple Factory(四创建型)

    工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...

  7. 学习设计模式第二十七 - GoF之外简单工厂模式

    示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...

  8. Objective-C 工厂模式(上) -- 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  9. C#设计模式系列:简单工厂模式(Simple Factory)

    1. 简单工厂模式简介 1.1 定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又 ...

随机推荐

  1. content provider其中操作文件的函数

    此类函数还是有杀伤力的 1.openAssetFile(Uri uri, String mode)This is like openFile(Uri, String), but can be impl ...

  2. MVC的验证(模型注解和非侵入式脚本的结合使用)

    @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客户端,后台服务器的验证,MVC统统都做了包含,即使用户 ...

  3. C#中的多线程 - 同步基础 z

    原文:http://www.albahari.com/threading/part2.aspx 专题:C#中的多线程 1同步概要Permalink 在第 1 部分:基础知识中,我们描述了如何在线程上启 ...

  4. shell逻辑运算符 1

    逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测『档案』是否存在 eg: if [ -f filename ] -d 常用!侦测『目录』是否存在 -b 侦测是否为一个『 bl ...

  5. Python初学者第六天 列表操作练习

    6day 列表练习: 1.创建一个空列表,命名为names,往里面添加old_drilver,rain,jack,shanshan,peiqi,black_girl: names = [] names ...

  6. jquery获取前一个月日期

    一) 重构Date对象: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年 ...

  7. JAVA中commons-collections-3.2.1.jar包是干什么用的?

    类似C++中的Boost库,对Java容器类型和算法的补充

  8. SQL rownum的用法

    rownum只显示两行记录,第一行是字段名,第二行是满足查询条件的记录.

  9. BZOJ1396:识别子串(SAM)

    Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample I ...

  10. nrf52840蓝牙BLE5.0空中数据解析

    一.基础知识: 我没找到蓝牙5.0的ATT数据格式图片,在蓝牙4.0的基础上做修改吧,如下图所示:   二.测试与分析: 参数设置: data length = 251字节,MTU = 247字节, ...