PHP设计模式之抽象工厂模式实例分析
时间:2022-07-27
本文章向大家介绍PHP设计模式之抽象工厂模式实例分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了PHP设计模式之抽象工厂模式。分享给大家供大家参考,具体如下:
前面的文章说了PHP下的简单工厂(静态工厂) 和工厂模式,现在说一下抽象工厂模式
工厂模式我们已经说过,增加一个产品很简单,增加对应的产品类和工厂类,不需要对原有代码进行改动,符合开闭原则
现在接着上篇文章,我们又有了新的需求,我们要求苹果味饮料和香蕉味饮料,有百事和可口可乐两个品牌,用工厂模式,就实现不了了,我只能增加单一的产品,但是增加品牌我实现不了,引申而出抽象工厂模式,代码如下
<?php
/**
* Created by PhpStorm.
* User: tiansi
* Date: 18/1/23
* Time: 下午5:10
*/
//工厂接口
interface FruitFactory{
//生产饮料方法
function makeAppleFruit();
function makeBananaFruit();
}
//饮料接口
interface Fruit{
function getFruitName();
}
class BaishiAppleFruit implements Fruit{
function getFruitName()
{
echo '百事苹果味饮料';
}
}
class BaishiBananaFruit implements Fruit{
function getFruitName()
{
echo '百事香蕉味饮料';
}
}
class ColeiAppleFruit implements Fruit{
function getFruitName()
{
echo '可口可乐苹果味饮料';
}
}
class ColeBananaFruit implements Fruit{
function getFruitName()
{
echo '可口可乐香蕉味饮料';
}
}
//百事饮料工厂
class BaishiFruitFactory implements FruitFactory{
function makeAppleFruit()
{
//生产百事苹果饮料
return new BaishiAppleFruit();
}
function makeBananaFruit()
{
//生产百事香蕉饮料
return new BaishiBananaFruit();
}
}
//可口可乐饮料工厂
class ColeFruitFactory implements FruitFactory{
function makeAppleFruit()
{
//生产可口可乐苹果饮料
return new ColeiAppleFruit();
}
function makeBananaFruit()
{
//生产可口可乐香蕉味饮料
return new ColeBananaFruit();
}
}
$baishi_factory = new BaishiFruitFactory();
$baishi_factory- makeAppleFruit()- getFruitName();
echo "<br/ ";
$baishi_factory- makeBananaFruit()- getFruitName();
echo "<br/ ";
$cole_factory = new ColeFruitFactory();
$cole_factory- makeAppleFruit()- getFruitName();
echo "<br/ ";
$cole_factory- makeBananaFruit()- getFruitName();
运行结果:
百事苹果味饮料 百事香蕉味饮料 可口可乐苹果味饮料 可口可乐香蕉味饮料
现在我们可以看到 如果想要再增加一个品牌的话 只需要再写一个工厂类 并写上对应的产品类 就可以在不改动原有代码的前提下 成功增加品牌
但是这会儿想要再增加一个单一产品,就很麻烦了,需要更改工厂类,这就是工厂和抽象工厂的区别
工厂模式针对于单一产品,一个产品抽象类,每个工厂只能创建一个产品,支持扩展单个产品,不支持扩展产品族,针对一个产品等级结构
抽象工厂针对于产品族,多个产品抽象类,每个工厂能创建多个产品,支持扩展产品族,不支持扩展单个产品,针对多个产品等级结构
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 在Linux上识别同样内容的文件详解
- Ubuntu下pycharm无法导入类的解决方法
- leetcode栈之最小栈
- Linux基础学习之利用tcpdump抓包实例代码
- Linux/Unix关于时间和时间戳的命令行
- git文件管理心得分享
- Linux如何实现断点续传文件功能
- Xshell实现Windows上传文件到Linux主机的方法
- Linux中的EXT系列文件系统格式详解
- Linux中hexdump命令用法
- CentOS7挂载新数据盘的完整步骤
- Linux下安装Keepalived及原理分析
- centos6搭建gitlab的方法步骤
- Linxu服务器上安装JDK 详细步骤
- linux 不改变目录结构移动 home 目录到新分区的操作方法