天涯论坛

 找回密码
 立即注册
搜索
查看: 20|回复: 2

PHP 平常设计模式——工厂模式

[复制链接]

2986

主题

3万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569168
发表于 2024-10-4 19:36:58 | 显示全部楼层 |阅读模式

近期参加了几次面试,针对应用平常的几种设计模式问题,深有感触。为加强自己理解,同期期盼能给有些初级研发必定的参考学习,决定起始就PHP平常的设计模式写下几篇博文,工作原由,会不定时更新,感谢您的耐心阅读!

今天这篇文案重点是描述一下PHP平常设计模式之工厂模式。工厂模式其实能够划分为:简单工厂模式、工厂办法模式、抽象工厂模式等。

1.简单工厂模式

简介:简单工厂模式又被叫作为静态工厂办法模式,属于设计模式中的类创建模式。官方解释为:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。通常用在详细制品很少扩展的状况下,不消经常修改,且不修改代码的话是不可实现扩展的。

优缺点:优点在于实现对象的创建和对象的运用分离,将对象的创建交给专门的工厂类负责;缺点在于工厂类不足灵活,增多新的制品时需要修改工厂类的代码,一旦制品较多时,工厂类将会变得反常繁杂

详细代码实例:

<?php class A { function __construct() { echo "我是A类"; } }class B { function __construct() { echo "我是B类"; } } class Factory { public static function create($name) { if ($name == A) { return newA(); }elseif ($name == B) { return new B(); } } } $a = Factory::create(A); $b = Factory::create(B);

2.工厂办法模式

简介:工厂办法模式经过定义了一个抽象出来的核心工厂类,并同期定义创建制品对象的接口,而创建详细实例的工作延迟到工厂子类中去完成。这种设计方式好处是核心类只需要关注工厂类的接口定义,详细的实例交由详细的工厂子类去创建。当需要新增一个制品时,无需修改现有的代码,只需要添加一个新的制品类和对应的工厂子类就可促进整体的扩展性更好。

优缺点:基于其简介咱们能够认识到,工厂办法模式是在简单工厂模式的基本上进一步的抽象,保存了简单工厂模式的优点,且处理了它的缺点。在工厂办法模式中,核心类仅仅负责给出详细工厂必须实现的接口,而无需再负责详细制品类实例化,使得系统能够在不修改整体代码的状况下方便的引进新的制品

具体代码实例:

<?php interface Basic { public function actionOne(); public function actionTwo(); } class A implements Basic { public function actionOne() { echo "我是A类—办法1"; } public function actionTwo() { echo "我是A类—办法2"; } } class B implements Basic { public function actionOne() { echo "我是B类—办法1"; } public function actionTwo() { echo "我是B类—办法2"; } } abstract class Factory { abstract static function createBasic(); } class A_Factory extends Factory { public static function createBasic() { return new A(); } } class B_Factory extends Factory { public static function createBasic() { return newB(); } } $a = A_Factory::createBasic(); $a->actionOne(); $a->actionTwo(); $b = B_Factory::createBasic(); $b->actionOne(); $b->actionTwo();

3.抽象工厂模式

简介:抽象工厂模式供给一个创建一系列关联或相互依赖对象的接口,而无须指定它们详细的类。此模式是在工厂办法模式上的进一步扩展。在工厂办法模式中,一个详细工厂负责一类详细制品的处理(一对一关系),但当咱们需要一个工厂负责生成多种类型制品时,就要抽象全部工厂类了。

举一个详细生活实例

制品结构:假设一个抽象类是手机,其子类有小米手机、华为手机、荣耀手机,那样抽象的手机和详细品牌的手机之间则构成为了一个制品结构,抽象手机是父类,详细品牌手机是其子类。制品组:制品指的是由同一工厂生产,位置于区别制品结构中的一组制品。如华为厂家生产的华为手机、华为手环,华为手机属于手机制品结构中,华为手环则属于手环制品结构中中。

详细代码实例

<?php interface Phone { public function open(); public function operate(); } class HuaweiPhone implements Phone { public function open() { echo "打开华为手机"; } public function operate() { echo "操作华为手机"; } } interface Bracelet { public function look(); public function click(); } class XiaomiBracelet implements Bracelet { public function look() { echo "查看小米手环"; } public function click() { echo "点击小米手环"; } } abstract class Factory { abstract public static function createPhone(); abstract public static function createBracelet(); } class ProductFactory extends Factory{ public static function createPhone() { return new HuaweiPhone(); } public static function createBracelet() { return newXiaomiBracelet(); } } $newPhone = ProductFactory::createPhone(); $newPhone->open(); $newPhone->operate(); $newBracelet = ProductFactory::createBracelet(); $newBracelet->look(); $newBracelet->click();

以上便是我对工厂模式的有些学习见解,期盼对部分同行人在理解上有必定帮忙,感谢你们的关注!





上一篇:php的几种运行模式CLI、CGI、FastCGI、mod_php
下一篇:[精选] php是怎么样工作的呢?它的生命周期是怎么样的呢?
回复

使用道具 举报

3063

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139046
发表于 2024-10-18 20:29:31 | 显示全部楼层
你的见解独到,让我受益匪浅,期待更多交流。
回复

使用道具 举报

2997

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109192
发表于 2024-10-30 03:47:36 | 显示全部楼层
期待与你深入交流,共探知识的无穷魅力。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 12:50 , Processed in 0.119981 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.