php 适配器,php适配器模式介绍

要点:

1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

实现:

faeb563d86cfbe90be9f35466258e7e6.png

类的适配器模式结构图(继承)

63a0cb2cf32e91af58508f208a027bc5.png

对象的适配器模式结构图(组合)

(对象适配器的代码实现)

Target:定义Client使用的与特定领域相关的接口

public interface Target { void request();}

Adaptee:现在需要适配的已经存在的接口

public class Adaptee{ public void specificRequest(){}}

Adapter:对Adaptee 的接口与Target接口进行适配

public class Adapter implements Target{ public Adapter(Adaptee adaptee) { super(); this.adaptee = adaptee; } public void request() { adaptee.specificRequest(); } private Adaptee adaptee;}

适用性:

1. 系统需要使用现有的类,而此类的接口不符合系统的需要。

2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

3. (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

效果及优缺点:

对于类适配器:

1. 用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

2. 使得Adapter可以override(重定义) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

对于对象适配器:

1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。

2. 使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Laravel 中,适配器模式(Adapter Pattern)可以帮助你将一个类的接口转换成另一个类的接口,以便两个类能够协同工作。适配器模式在 Laravel 中广泛应用于与外部服务和组件的集成。 在适配器模式中,三个关键角色: 1. 目标接口(Target Interface):定义了客户端代码期望的接口。 2. 适配器(Adapter):实现了目标接口,并且通过包装一个已有的类来实现目标接口的方法。 3. 被适配者(Adaptee):已有的类,其接口与目标接口不兼容。 在 Laravel 中,适配器模式常见的应用场景是与外部服务进行集成。例如,你可能需要将一个第三方支付服务的接口适配成 Laravel 中的统一支付接口,以便在不同的支付服务之间切换时不需要修改大量代码。 以下是一个简单的示例: ```php // 目标接口 interface PaymentGateway { public function pay($amount); } // 适配器 class ThirdPartyPaymentAdapter implements PaymentGateway { protected $thirdPartyPaymentService; public function __construct(ThirdPartyPaymentService $thirdPartyPaymentService) { $this->thirdPartyPaymentService = $thirdPartyPaymentService; } public function pay($amount) { $this->thirdPartyPaymentService->processPayment($amount); } } // 被适配者 class ThirdPartyPaymentService { public function processPayment($amount) { // 调用第三方支付服务的接口 } } // 客户端代码 $thirdPartyPaymentService = new ThirdPartyPaymentService(); $paymentGateway = new ThirdPartyPaymentAdapter($thirdPartyPaymentService); $paymentGateway->pay(100); ``` 在上述示例中,我们定义了一个目标接口 `PaymentGateway`,适配器 `ThirdPartyPaymentAdapter` 实现了该接口,并通过包装 `ThirdPartyPaymentService` 类来实现目标接口的方法。客户端代码通过适配器来调用支付接口。 通过适配器模式,我们可以将第三方支付服务的接口适配成 Laravel 中的统一支付接口,以便在应用中使用统一的接口进行支付操作。 请注意,这只是一个简单示例,实际应用中可能涉及更复杂的逻辑和配置。适配器模式的具体实现方式会根据场景和需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值