PHP中应用Service Locator服务定位及单例模式

单例模式将一个对象实例化后,放在静态变量中,供程序调用。

服务定位(ServiceLocator)就是对象工场Factory,调用者对象直接调用Service Locator,与被调用对象减轻了依赖关系,这样如果被调用对象更换时,直接修改ServiceLocator的注册即可,不用修改程序中很多个地方的调用,从而减轻依赖关系。

我在学习单例模式的思路时,有一个疑问总是围绕着自己,单例模式就是静态变量呗,为什么要叫单例模式,有什么好处?静态类+静态方法不是很好?

当我学习了ServiceLocator后者明白,单例模式是一个对象放在静态变量中,这样可以减轻程序的耦合度,因为这个对象是很容易更换成另一个对象,而静态类直接调用就不行了。

哪么ServiceLocator如何实现呢,下面代码举例说明。

自己实现ServiceLocator

YII2框架中的ServiceLocator

总结

时间: 2024-08-05 21:23:51

PHP中应用Service Locator服务定位及单例模式的相关文章

Service Locator 模式

什么是Service Locator 模式? 服务定位模式(Service Locator Pattern)是一种软件开发中的设计模式,通过应用强大的抽象层,可对涉及尝试获取一个服务的过程进行封装.该模式使用一个称为"Service Locator"的中心注册表来处理请求并返回处理特定任务所需的必要信息. 场景描述 某类ClassA依赖于服务ServiceA和服务ServiceB,服务的具体类型需在编译时指定. 这种条件下有以下缺点: 尝试替换或更新依赖项,必须更改类的源代码并且重新编

[Design Pattern] Service Locator Pattern 简单案例

Service Locator Pattern,即服务定位模式,用于定位不同的服务.考虑到 InitialContext::lookup 的成本比较高,提供了 Cache 类缓存以定位到的服务. 代码实现 Service 接口 public interface Service { public String getName(); public void execute(); } Service1, Service2 实现 Service 接口,提供具体服务 public class Servic

.NET 服务器定位模式(Service Locator Pattern)

本文内容 场景 目标 解决方案 实现细节 思考 相关模式 更多信息 参考资料 下载 Demo 场景 你有一个类,该类依赖几个服务 Service(事实上,这些服务可以看做是另几个类),这些服务是在编译阶段指定具体类型的.在接下来的例子中,ClassA 在编译阶段依赖 ServiceA 和ServiceB.下图说明这个问题. 这种情况有如下缺点: 若替换或更新依赖的服务(或类),显然,必须修改源代码,并且重新编译解决方案: 这些依赖的具体实现(依赖的服务的具体实现)必须在编译时可用:The con

Android中实现开机自动启动服务(service)实例

最近在将 HevSocks5Client 移植到 Android 上了,在经过增加 signalfd 和 timerfd 相关的系统调用支持后,就可以直接使用 NDK 编译出 executable 了.直接的 native exectuable 在 Android 系统总还是不太方便用哦.还是做成一个 apk 吧,暂定只写一个 service 并开机自动启用,无 activity 的. Java 中调用 native 程序我选择使用 JNI 方式,直接在 JNI_OnLoad 方法中调用 pth

第6章 服务模式 在 .NET 中实现 Service Gateway(服务网关)

上下文 您正在设计企业应用程序,该程序需要使用由其他应用程序提供的服务.该服务定义了一个合约,所有服务使用者要访问该服务都必须遵守该合约.该合约定义了与此服务通信所需的技术.通信协议和消息定义等内容.要与该服务通信,应用程序需要按合约中的详细说明履行其责任. 问题 如何将该服务所规定的履行合约责任的细节与应用程序的其余部分分隔开来? 影响因素 在设计使用由其他应用程序提供的服务的应用程序时,必须考虑下列影响因素: 履行使用者的合约责任需要实现安全和通信机制,例如验证.封送.加密和消息路由.这些机

重温WCF之构建一个简单的WCF(一)(2)通过Windows Service寄宿服务和WCF中实现操作重载

参考地址:http://www.cnblogs.com/zhili/p/4039111.html 一.如何在Windows Services中寄宿WCF服务 第一步:创建Windows 服务项目,具体添加步骤为右键解决方案->添加->新建项目,在已安装模板中选择Windows 服务模板,具体如下图示所示: 第二步:添加Windows服务之后,修改对应的Service1.cs文件 using System; using System.Collections.Generic; using Syst

Android应用中使用百度地图API定位自己的位置(二)

官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发者们提供了如下类型的地图覆盖物: 我的位置图层(MyLocationOverlay):用于显示用户当前位置的图层(支持自定义位置图标): Poi搜索结果图层(PoiOverlay):用于显示兴趣点搜索结果的图层: 路线图层(RouteOverlay):公交.步行和驾车线路图层,将公交.步行和驾车出行方案的路线及关键点显示在地图上(起.终

Service Locator Patten 总结

原网址将会不断更新 :   作程的技术博客  <Service Locator Patten 总结>  it.zuocheng.net  http://www.zuocheng.net/it 核心思想 将构建依赖的接口彻底与依赖者分离,并将此依赖作为"服务"绑定到一个标识符,而后依赖者则可通过这个标识符获取被绑定的依赖. 优点 上层逻辑不依赖于服务接口的具体实现,实现解耦 提高系统的可扩展性 逻辑分层更加简洁清晰,使不同层次的开发人员各司其职,提高团队开发效率 适用场景 与

Atitit。如何实现dip, di ,ioc ,Service Locator的区别于联系

Atitit.如何实现dip, di ,ioc  ,Service Locator的区别于联系 1. Dip原则又来自于松耦合思想方向1 2. 要实现dip原则,有以下俩个模式1 3. Ioc和di的区别1 4. Service Locator模式1 5.  Service Locator vs. Dependency Injection2 6. 参考2 1. Dip原则又来自于松耦合思想方向 松耦合系统的好处有两点:一点是它适应变化的灵活性:另一点是当某个服务的内部结构和实现逐渐发生改变时,不