「PHP」简单工厂模式
- 《大话设计模式》程杰
产品类:其中Memcached和Redis是产品类,暂时举例两个产品类,可能会有很多个。
工厂类:声明一个公共类,由该类指定使用哪个产品,这样就不需要改动【调用层】代码内容。
看到这个图是不是对关键词清晰很多了。
我们要做什么:
让工厂类【公共类】来选择调用哪个具体产品
<?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」简单工厂模式的更多相关文章
- 「PHP」抽象工厂模式
引言 所属:创建型模式,常用设计模式之一 参考资料: <大话设计模式>程杰 模式概述 官方定义:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或互相 ...
- PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...
- C#设计模式之简单工厂模式(Simple Factory)
1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...
- 设计模式 — 简单工厂模式(Simple Factory)
定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类. 模式类型:创建型模型 Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑:工厂类可以 ...
- C#设计模式(2)——简单工厂模式
一.概念:简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创 ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- 学习设计模式第二十七 - GoF之外简单工厂模式
示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...
- Objective-C 工厂模式(上) -- 简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...
- C#设计模式系列:简单工厂模式(Simple Factory)
1. 简单工厂模式简介 1.1 定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又 ...
随机推荐
- AWS的load balance
Route53实现了地理上的load balance; ELB实现了region内的load balance CloudFront实现了静态内容的全网加速 ZULh?*;&T(
- Linux 虚拟机中配置 GNOME + VNC
需求描述 在特定的需求下,需要用到 Linux 的图形化界面,但是 Azure 平台提供的虚拟机默认没有开放远程图形化登陆的功能.以下解决方案,提供了市面上非常流行的 GNOME + VNC 的组合来 ...
- Linux ->> Ubuntu 14.04 LTE下配置SSH免密码登录
首先用apt-get命令安装SSH jerry@ubuntu:~$ sudo apt-get install ssh [sudo] password for jerry: Reading packag ...
- vsphere的P2V工具做的物理机迁移到虚拟机报错out of memory
vsphere的P2V工具做的物理机迁移到虚拟机 迁移成功,但是启动报错 进入rescue模式后发现是sysctl.conf文件的参数设大了因为虚拟机的内存没有物理机内存大 kernel.shm ...
- ubuntu 18.4 鼠标右键菜单 添加文件
执行以下指令,在template文件夹中,增加一个空文件 touch ~/Templates/Empty\ Document
- 优秀 Java 程序员写代码的风格,不再留坑给别人
往 期 精 彩 推 荐 [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...
- OC Nsstring的使用
// // main.m // NSString // // Created by mj on 13-4-5. // Copyright (c) 2013年 itcast. All rights re ...
- D3——根据数据画图
为DOM元素添加class .attr("class", "bar") //为元素添加class属性,<div class="bar" ...
- DispatcherServlet类的分析
突然发现拿博客园来做笔记挺好的,不会弄丢.下面我把DispatcherServlet类的部分源代码复制到这里,然后阅读,把重要的地方翻译一下,该做笔记的地方做下笔记,蹩脚英语. =========== ...
- bzoj2816 [ZJOI2012]网络
Description http://www.lydsy.com/JudgeOnline/upload/zjoi2012.pdf 正解:$link-cut \ tree$. $LCT$板子题,直接维护 ...