zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP设计模式——适配器模式

2023-09-27 14:28:46 时间

声明:本系列博客参考资料《大话设计模式》,作者程杰。

          适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的(适配器模式要解决的核心问题)。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。


        类图:

      

       待适配(ForeignPlayer)角色:此角色的接口规则内部的接口规则不一致,但内部需要调用该角色的方法功能。

       内部接口(IPlayer)角色:这是一个抽象角色,此角色给出内部期待的接口规则。

       适配器(Adapter)角色:通过在内部包装一个Adapter对象,把待适配接口转换成目标接口,此角色为适配器模式的核心角色,也是适配器模式所解决问题的关键。


       代码:

      

 ?php

 * Created by PhpStorm.

 * User: Jiang

 * Date: 2015/4/26

 * Time: 12:23

//-------------抽象接口---------------

/**抽象运动员

 * Interface IPlayer

interface IPlayer

 function Attack();

 function Defense();

/**前锋

 * Class Forward

class Forward implements IPlayer

 function Attack()

 echo "前锋攻击 br/ 

 function Defense()

 echo "前锋防御 br/ 

/**中锋

 * Class Center

class Center implements IPlayer

 function Attack()

 echo "中锋攻击 br/ 

 function Defense()

 echo "中锋防御 br/ 

//--------------待适配对象-----------

/**姚明 外籍运动员

 * Class Yaoming

class Yaoming

 function 进攻()

 echo "姚明进攻 br/ 

 function 防御()

 echo "姚明防御 br/ 

//------------适配器--------------

/**适配器

 * Class Adapter

class Adapter implements IPlayer

 private $_player;

 function __construct()

 $this- _player=new Yaoming();

 function Attack()

 $this- _player- 进攻();

 function Defense()

 $this- _player- 防御();

}
         客户端测试代码:

        

header("Content-Type:text/html;charset=utf-8");

//------------------------原型模式测试代码------------------

require_once "./Adapter/Adapter.php";

$player1=new Forward();

echo "前锋上场: br/ 

$player1- Attack();

$player1- Defense();

echo " hr/ br/ 

echo "姚明上场: br/ 

$yaoming=new Adapter();

$yaoming- Attack();

$yaoming- Defense();

适用场景

1.接口中规定了所有要实现的方法

2.但要有一个实现此接口的具体类,只用到了其中的几个方法,而其它的方法都是没有用的。

注意事项

1.充当适配器角色的类就是实现已有接口的抽象类

2.为什么要用抽象类:

此类是不要被实例化的。而只充当适配器的角色,也就为其子类提供了一个共同的接口,但其子类又可以将精力只集中在其感兴趣的地方。


欢迎关注我的视频课程,地址如下,谢谢。


   PHP面向对象设计模式


PHP+Laravel框架RabbitMQ简单使用(路由模式) 一、简介 路由模式跟发布订阅模式类似,然后在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列
PHP+Laravel框架RabbitMQ简单使用(Pub/Sub模式) 一、简介 publish-and- subscribe, 即发布订阅模型。在Pub/Sub模型中,生产者将消息发布到一个主题(Topic)中,订阅了该Topic的所有下游消费者,都可以接收到这条消息。 每个消息可以有多个订阅者; 客户端只有订阅后才能接收到消息; 持久订阅和非持久订阅。 发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息; 持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线; 非持久订阅:订阅者为了接受消息,必须一直在线。 当只有一个订阅者时约等于点对点模式
PHP+Laravel框架RabbitMQ简单使用(工作队列模式(竞争消费者模式)) 工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式 假如我们拥有两个消费者,默认情况下,RabbitMQ 将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为轮询。 假如有一些非常耗时的任务,某个消费者在缓慢地进行处理,而另一个消费者则空闲,显然是非常消耗资源的。
好1234 在PHP技术圈摸爬滚打四五载,经历了高并发、大数据项目的各种坑,不断的在坑中打磨成长。热衷技术领域:Yii2 、 Mysql 、Redis 、ElasticSearch 、Nginx、设计模式、分布式存储、分布式编程,对面向对象编程有比较独到的见解,重视团队协作。