php 工厂方法模式,详解PHP之简单工厂模式

本文主要为大家分享一篇详解PHP之简单工厂模式 ,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

1.简单工厂的定义

提供一个创建对象实例的功能,而无需关系其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。

2.简单工厂的结构和说明

简单工厂的结构如下图:

88bf5962ecb3b74959649087179d29b8.pngApi: 定义客户所需要的功能接口

Impl: 具体实现Api的实现类,可能会有多个

Factory: 工厂,选择合适的实现类来创建Api接口对象

Client: 客户端,通过Factory 来获取Api接口对象,然后面向Api接口编程

Api接口:/**

* 接口的定义,该接口可以通过简单工厂来创建

*

* @author Administrator

*

*/

public interface Api {

/**

* 具体功能方法的定义

*

* @param s

* 需要的参数

*/

public void operation(String s);

}

ImplA:/**

* 接口的具体实现对象A

*

* @author Administrator

*

*/

public class ImplA implements Api {

@Override

public void operation(String s) {

// 实现的功能

System.out.println("ImplA s==" + s);

}

}

ImplB:/**

* 接口的具体实现对象B

*

* @author Administrator

*

*/

public class ImplB implements Api {

@Override

public void operation(String s) {

// 实现的功能

System.out.println("ImplB s==" + s);

}

}

Factory:/**

* 工厂类,用来创建Api对象

*

* @author Administrator

*

*/

public class Factory {

/**

* 具体创建Api对象的方法

*

* @param condition

* 从外部传入的选择条件

* @return

*/

public static Api createApi(int condition) {

// 应该根据某些条件去选择究竟创建哪一个具体的实现对象

// 这些条件可以从外部传入,也可以从其他途径获取

// 如果只有一个实现,可以省略条件

Api api = null;

if (condition == 1) {

api = new ImplA();

} else if (condition == 2) {

api = new ImplB();

}

return api;

}

}

测试类Client:public class Client {

public static void main(String[] args) {

// 通过简单工厂来获取接口对象

Api api = Factory.createApi(1);

api.operation("正在使用简单工厂模式");

}

}

简单工厂的调用顺序示意图:

3ca7dded7a5b23eb52fa10e5145f5bed.png

简单工厂的命名建议:类命名建议为“模块名称+Factory”,比如,用户模块的工厂就称为UserFactory

方法名称通常为“get+接口名称”或者是“create+接口名称”。比如用户接口名称为UserEbi,那么方法名称通常为getUserEbi或者createUserEbi。

简单工厂方法的内部主要实现的功能是“选择合适的实现类”,选择条件或者是参数的来源通常为一下集中:来源于客户端,由Client来传入参数

来源于配置文件,从配置文件获取用于判断的值

来源于程序运行期的某个值,比如从缓存中获取某个运行期的值

简单工厂的优点:帮助封装

简单工厂虽然简单,但是非常友好地帮助我们实现了组件的封装,然后让组件外部能真正面向接口编程。

2. 解耦

通过简单工厂,实现了客户端和具体实现类的解耦。

简单工厂的缺点:

1. 可能增加客户端的复杂度

2.不方便扩展子工厂

简单工厂的本质:选择实现

何时选择简单工厂:如果想完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选择简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。

如果想要把对外创建对象的职责集中管理和控制,可以选择简单工厂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值