当前位置:Gxlcms > PHP教程 > PHP设计模式——适配器模式_PHP教程

PHP设计模式——适配器模式_PHP教程

时间:2021-07-01 10:21:17 帮助过:5人阅读

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


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

类图:

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150430/042U5E34-0.png

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

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

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

代码:

  1. <!--?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Jiang
  5. * Date: 2015/4/26
  6. * Time: 12:23
  7. */
  8. //-------------抽象接口---------------
  9. /**抽象运动员
  10. * Interface IPlayer
  11. */
  12. interface IPlayer
  13. {
  14. function Attack();
  15. function Defense();
  16. }
  17. /**前锋
  18. * Class Forward
  19. */
  20. class Forward implements IPlayer
  21. {
  22. function Attack()
  23. {
  24. echo 前锋攻击<br/-->;
  25. }
  26. function Defense()
  27. {
  28. echo 前锋防御
  29. ;
  30. }
  31. }
  32. /**中锋
  33. * Class Center
  34. */
  35. class Center implements IPlayer
  36. {
  37. function Attack()
  38. {
  39. echo 中锋攻击
  40. ;
  41. }
  42. function Defense()
  43. {
  44. echo 中锋防御
  45. ;
  46. }
  47. }
  48. //--------------待适配对象-----------
  49. /**姚明 外籍运动员
  50. * Class Yaoming
  51. */
  52. class Yaoming
  53. {
  54. function 进攻()
  55. {
  56. echo 姚明进攻
  57. ;
  58. }
  59. function 防御()
  60. {
  61. echo 姚明防御
  62. ;
  63. }
  64. }
  65. //------------适配器--------------
  66. /**适配器
  67. * Class Adapter
  68. */
  69. class Adapter implements IPlayer
  70. {
  71. private $_player;
  72. function __construct()
  73. {
  74. $this->_player=new Yaoming();
  75. }
  76. function Attack()
  77. {
  78. $this->_player->进攻();
  79. }
  80. function Defense()
  81. {
  82. $this->_player->防御();
  83. }
  84. }

客户端测试代码:

  1. header(Content-Type:text/html;charset=utf-8);
  2. //------------------------原型模式测试代码------------------
  3. require_once ./Adapter/Adapter.php;
  4. $player1=new Forward();
  5. echo 前锋上场:
  6. ;
  7. $player1->Attack();
  8. $player1->Defense();
  9. echo


; echo 姚明上场:
; $yaoming=new Adapter(); $yaoming->Attack(); $yaoming->Defense();

适用场景

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

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

注意事项

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

2.为什么要用抽象类:

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



www.bkjia.comtruehttp://www.bkjia.com/PHPjc/991916.htmlTechArticlePHP设计模式——适配器模式 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的(适配器模式要解决的核心问...

人气教程排行