PHP设计模式之抽象工厂模式实例分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-14 11:44:19 浏览: 评论:0
这篇文章主要介绍了PHP设计模式之抽象工厂模式,结合实例形式分析了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();
运行结果:
百事苹果味饮料
百事香蕉味饮料
可口可乐苹果味饮料
可口可乐香蕉味饮料
现在我们可以看到 如果想要再增加一个品牌的话 只需要再写一个工厂类 并写上对应的产品类 就可以在不改动原有代码的前提下 成功增加品牌。
但是这会儿想要再增加一个单一产品,就很麻烦了,需要更改工厂类,这就是工厂和抽象工厂的区别。
工厂模式针对于单一产品,一个产品抽象类,每个工厂只能创建一个产品,支持扩展单个产品,不支持扩展产品族,针对一个产品等级结构。
抽象工厂针对于产品族,多个产品抽象类,每个工厂能创建多个产品,支持扩展产品族,不支持扩展单个产品,针对多个产品等级结构。
Tags: PHP设计模式 PHP工厂模式
相关文章
- ·PHP设计模式-单例模式学习笔记(2015-12-10)
- ·php设计模式之单例模式实例分析(2021-05-14)
- ·PHP设计模式之装饰者模式代码实例(2021-05-26)
- ·PHP设计模式之适配器模式代码实例(2021-05-26)
- ·PHP 设计模式系列之 specification规格模式(2021-07-05)
- ·PHP设计模式之注册树模式分析(2021-09-01)
- ·PHP设计模式之装饰器模式实例详解(2021-09-03)
- ·PHP设计模式之PHP迭代器模式讲解(2021-11-13)
- ·PHP设计模式之简单工厂和工厂模式实例分析(2021-11-14)
- ·PHP设计模式之单例模式定义与用法分析(2021-11-14)
- ·PHP设计模式之策略模式原理与用法实例分析(2021-11-15)
- ·php设计模式之单例模式用法经典示例分析(2021-12-19)
- ·php设计模式之适配器模式原理、用法及注意事项详解(2021-12-22)
- ·PHP中单例模式与工厂模式详解(2018-08-02)
- ·浅析php工厂模式(2021-04-30)
- ·PHP基于工厂模式实现的计算器实例(2021-06-12)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)