广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP设计模式中工厂模式深入详解
  • 463
分享到

PHP设计模式中工厂模式深入详解

PHP工厂模式PHP设计模式 2022-11-13 19:11:52 463人浏览 八月长安
摘要

目录简介简单工厂作用适用场景优点缺点代码工厂模式作用适用场景优点缺点代码抽象工厂作用适用场景优点缺点代码三者对比简介 工厂模式属于创建型模式,可以分为三种:简单工厂、工厂模式、抽象工

简介

工厂模式属于创建型模式,可以分为三种:简单工厂、工厂模式、抽象工厂。

通俗讲就是用于如何优雅的创建对象而设计。当开发者不知道建什么对象,或者创建方式过于复杂的时候去使用(比如引入一个大composer项目或大型sdk,有些时候确实不知道需要使用那些对象,此时就需要参考官方文档,通过包里或sdk里提供的工厂方法,传入指定参数去生成指定对象。比如easyWechat项目。),适用于具有服务端和调用端的场景,既能优化调用端的使用体感,也能隐藏服务端创建对象的细节。

简单工厂

作用

帮忙创建对象(核心方法可以使用静态方法,称之为静态工厂)。

适用场景

  • 当不知道创建什么对象的时候去使用
  • 创建对象过于复杂的时候去使用。

优点

简单工厂是工厂模式中创建对象最简单的方式,通俗容易理解。

缺点

当要生产对象的模块发生了需求变更,此时要被实例化的类可能会增加或者减少,此时就需要改工厂模式的核心代码,违背了开闭原则。

代码

class Keyboard{
    public function run() {
        return '我能打字';
    }
}
class Mouse {
    public function run() {
        return '我能控制光标';
    }
}
class Factory {
    public static function build($key) {
        if($key == 'mouse') {
            return new Mouse();
        } else if ($key == 'keyboard') {
            return new Keyboard();
        }
    }
}
//----------调用端----------
$res = Factory::build('mouse')->run();

class Factory {
    public static function build($class) {
        return ucfirst($class);
    }
}

工厂模式

作用

解决了简单工厂模式中违背开闭原则的问题。

适用场景

  • 并解决了简单工厂模式下,一旦类发生变化,就需要修改核心模块的作用,遵循开闭原则。
  • 产品层变化较大的的场景

优点

  • 将创建对象的过程推迟的子类去实现,职责清晰,比较符合开闭原则。
  • 并解决了简单工厂模式下,一旦类发生变化,就需要修改核心模块的作。

缺点

额外增加设计复杂度,每增加一个类,就需要增加一个子工厂。增加了系统抽象性。

代码

interface Usb {
    public function run();
}
class Keyboard implements USb {
    public function run() {
        return '我能打字';
    }
}
class Mouse implements USb {
    public function run() {
        return '我能控制光标';
    }
}
interFace Factory {
    public static function build();
}
class KeyboardFactory implements Factory {
    public static function build() :Keyboard {
        return new Keyboard();
    }
}
class MouseFactory implements Factory {
    public static function build() :Mouse {
        return new Mouse();
    }
}
//----------调用端----------
$res = MouseFactory::build()->run();

抽象工厂

作用

  • 抽象工厂相比于工厂模式,可以创建一堆互有关联对象。
  • 抽象工厂的实现由4部分构成:抽象工厂,具体工厂,抽象产品,具体产品。

适用场景

对象创建过程复杂,并且类与类之间有关联的时候。

优点

抽象工厂可以用一个类的不同方法返回不同对象,(工厂模式一个子类生产一个对象,抽象工厂可以生产出多个对象),替代系统中存在大量的工厂类。

缺点

会产生较大的变动,需要添加指定的方法去维护抽象工厂的完整性。

代码

interface Talk {
    public function say();
}
class EnglishTalk implements Talk {
    public function say() {
        return 'I can speak English';
    }
}
class ChineseTalk implements Talk {
    public function say() {
        return '我会说中文';
    }
}
interface Write {
    public function writeWord();
}
class EnglishWrite implements Write {
    public function writeWord() {
        return 'I can write English Words';
    }
}
class ChineseWrite implements Write {
    public function writeWord() {
        return '我会写汉字';
    }
}
interface Factory {
    public static function buildSay();
    public static function buildWriteWord();
}
class EnglishFactory implements Factory {
    public static function buildSay() :EnglishTalk {
        return new EnglishTalk();
    }
    public static function buildWriteWord() :EnglishWrite {
        return new EnglishWrite();
    }
}
class ChineseFactory implements Factory {
    public static function buildSay() :ChineseTalk {
        return new ChineseTalk();
    }
    public static function buildWriteWord():ChineseWrite {
        return new ChineseWrite();
    }
}
//----------调用端----------
//中国人对应会说汉语,或写汉字,这就是有关联,
$chinese_say        = ChineseFactory::buildSay()->say();
$chinese_write_word = ChineseFactory::buildWriteWord()->writeWord();

三者对比

 简单工厂工厂模式抽象工厂
实现难度相对简单相对复杂相对复杂
实现细节通过方法生产对象(不需要子类)通过子类方法去生产对象通过子类方法去生产有关联的对象
优点实现简单解决了简单工厂违背开闭原则的问题可以制造一堆有关联的对象,减少工厂模式下工厂子类的数量
缺点违背开闭原则,不适用修改产品更加抽象,类数量增加,不方便维护更加抽象,类数量增加,不方便维护
适用场景简单场景,类之间无关联且不经常变动需要实例化的产品容易有变动类之间有关联,且不经常变动

到此这篇关于PHP设计模式中工厂模式深入详解的文章就介绍到这了,更多相关php工厂模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PHP设计模式中工厂模式深入详解

本文链接: https://www.lsjlt.com/news/170691.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP设计模式中工厂模式深入详解
    目录简介简单工厂作用适用场景优点缺点代码工厂模式作用适用场景优点缺点代码抽象工厂作用适用场景优点缺点代码三者对比简介 工厂模式属于创建型模式,可以分为三种:简单工厂、工厂模式、抽象工...
    99+
    2022-11-13
    PHP工厂模式 PHP设计模式
  • PHP设计模式之工厂模式详解
    工厂模式是一种创建型设计模式,它提供了一种统一的方式来创建对象,而不用直接实例化对象。工厂模式可以隐藏对象创建的细节,客户端只需要调...
    99+
    2023-08-14
    php
  • Java设计模式——工厂设计模式详解
    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。工厂模式的形态工厂模式主要用一下几种形态:简单工厂(Simple Factory)。2:工厂方法(Factory Method)。3:抽象工厂(Abstract...
    99+
    2023-05-30
    java 设计模式 ava
  • 深入了解GoLang中的工厂设计模式
    目录1. 定义2. 优点3. 代码实现3.1 普通工厂3.2 工厂方法3.3 抽象工厂1. 定义 工厂模式是一种创建型设计模式,有了工厂只需要知道要制造的东西名字,就能让对应工厂进行...
    99+
    2023-05-20
    GoLang工厂模式 Go工厂模式 GoLang设计模式工厂模式
  • 深入理解Java设计模式之抽象工厂模式
    目录一、什么是抽象工厂模式二、抽象工厂模式的应用场景三、抽象工厂模式和工厂方法模式对比四、抽象工厂模式的优缺点五、抽象工厂模式的实现六、总结一、什么是抽象工厂模式 为创建一组相关或相...
    99+
    2022-11-12
  • 深入理解Java设计模式之简单工厂模式
    目录一、什么是简单工厂模式二、简单工厂模式的结构三、简单工厂模式的应用场景四、简单工厂模式和工厂方法模式区别五、简单工厂模式和策略模式的异同六、简单工厂模式的优缺点七、简单工厂模式的...
    99+
    2022-11-12
  • Java创建型设计模式之工厂方法模式深入详解
    目录简单工厂模式定义产品对象创建工厂类工厂使用反射工厂方法模式概述应用场景优缺点主要角色工厂方法模式的基本使用创建抽象产品创建具体产品创建抽象工厂创建具体工厂客户端执行简单工厂模式 ...
    99+
    2022-11-13
  • java设计模式--三种工厂模式详解
    目录简单工厂代码:1.产品接口2.产品接口实现子类3.简单工厂类4.调用工厂5.测试工厂方法代码:1.工厂接口2.工厂实现子类3.产品接口4.产品实现子类5.调用6.测试1.产品接口...
    99+
    2022-11-12
  • Java 深入理解创建型设计模式之抽象工厂模式
    1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类。抽象工厂模式可以将简单工厂模式和工厂方法模式进...
    99+
    2022-11-13
  • python设计模式之抽象工厂模式详解
    抽象工厂模式(Abstract Factory Pattern):属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它...
    99+
    2022-11-12
  • Java设计模式之抽象工厂模式详解
    目录一、什么是抽象工厂模式二、示例程序三、UML一、什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,这称之为抽象工厂模式(Abstract ...
    99+
    2022-11-12
  • Java设计模式之工厂模式案例详解
    目录分类案例需求方案一:简单工厂模式方案二:工厂方法模式方案三:抽象工厂模式对比分析总结 分类 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 案例 需求 根据蛋糕的不同口味,...
    99+
    2022-11-13
  • Java设计模式之工厂方法模式详解
    目录1.工厂方法是什么2.如何实现3.代码实现4.工厂方法模式的优点5.拓展1.工厂方法是什么 众所周知,工厂是生产产品的,并且产品供消费者使用。消费者不必关心产品的生产过程,只需要...
    99+
    2022-11-13
  • java设计模式之简单工厂模式详解
    简单工厂模式:由一个工厂对象决定创建出哪一种类的实例。抽象类public abstract class People { public abstract void doSth();}...
    99+
    2023-05-31
    java 设计模式 简单工厂
  • JAVA设计模式之工厂模式(三种工厂模式)
    1.工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23 种设计模式...
    99+
    2023-09-04
    设计模式
  • Java中常用的设计模式之工厂模式详解
    目录优点缺点使用场景一、实现方式1、定义一个接口2、定义两个接口实现类3、定义一个工厂类二、测试总结优点 1.一个调用者想创建一个对象,只要知道其名称就可以了。 2.扩展性高,如果想...
    99+
    2022-11-13
  • Golang设计模式中抽象工厂模式详细讲解
    目录抽象工厂模式概念示例抽象工厂模式 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 抽象工厂定义了用于创建不同产品的接口, 但将实际的创建工...
    99+
    2023-01-11
    Go抽象工厂模式 Go设计模式
  • Java工厂设计模式课程详解
    工厂模式是Java中最常用的设计模式之一。 这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。 在工厂模式中,我们没有创建逻辑暴露给客户端创建对象,并使用一个通用的接口引用新创建的对象。 (推荐学习:jav...
    99+
    2016-01-06
    java教程 Java
  • php设计模式中工厂模式有什么用
    这篇文章将为大家详细讲解有关php设计模式中工厂模式有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用工厂模式的目的或目标?工厂模式的最大优点在于创建对象上面,就...
    99+
    2022-10-19
  • C#设计模式之工厂模式
    这是我们用得比较多的一种设计模式,也是23种标准设计模式之一,使用前面讲的简单工厂设计模式,遇到具体产品经常变换时就不太适合了,违反了开闭设计原则;怎么才能避免修改工厂类呢?工厂方法...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作