PHP适配器模式--


把一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配无法在一起工作的两个类可以一起工作。

适配器的用意是将接口不同而功能相同或者相近的两个接口加以转换,为适配器角色补充一个原角色没有的方法。

一、类的适配器模式

把被适配的类的API转换成目标类的API

涉及的角色:

目标角色(就是所期待的得到的接口,由于这里讨论的是类适配器,因此目标不可以是类 )

原角色adaptee 现有需要适配的接口。

适配器角色:适配器类,把源接口转换成目标接口。这一角色必须是类。

example:

 1 /**
 2  * 类的适配器模式
 3  */
 4 interface Target{
 5 
 6     /**
 7      * 这里是源类已有的方法
 8      */
 9     public function sampleOperation1();
10     /**
11      * 
12      * 源类没有的方法 ...
13      */
14     public function sampleOperation2();
15     
16     
17 
18 }
19 
20 class adaptee{
21 
22     /**
23      * 此类为源类
24      */
25     
26     public function sampleOperation1(){
27     
28     }
29 
30 }
31 /**
32  * 
33  * 适配器-- ...
34  * @author Lujianchao
35  *
36  */
37 
38 class adapter extends adaptee implements Target{
39 
40     
41     
42     public function sampleOperation2(){
43     
44         //some actions
45     }
46 
47 }
View Code

二、对象的适配器模式

与类的适配器模式一样,对象的适配器模式把被适配的类的API钻换成目标类的API,不同的是,对象适配器模式不再使用继承,而是运用委派关系连接到apatee类。

因此可以通过委派将多种不同的源适配到同一个目标。这是与类适配器的区别。。

但是,想要置换掉源类的方法不容易,如果一定要,则只好先做一个源类的子类,将源类方法置换掉。然后把源类的子类当做真正的源进行适配。

置换不易但是添加易。

example:

 1 /**
 2  * 对象适配器
 3  * 
 4  */
 5 
 6 interface Target{
 7 
 8     /**
 9      * 这里是源类已有的方法
10      */
11     public function sampleOperation1();
12     /**
13      * 
14      * 源类没有的方法 ...
15      */
16     public function sampleOperation2();
17     
18     
19 
20 }
21 
22 class adaptee{
23 
24     /**
25      * 此类为源类
26      */
27     
28     public function sampleOperation1(){
29     
30     }
31 
32 }
33 
34 /**
35  * 
36  * 没有继承关系 ...
37  * @author Lujianchao
38  *
39  */
40  class Adapter implements Target{
41  
42      private $adaptee;
43      
44      /**
45       * 
46       * 委托..
47       * @param $adaptee
48       */
49      
50      public function Adapter(adaptee $adaptee){
51      
52          $this->adaptee=$adaptee;
53      }
54      
55      /**
56       * 委派
57       */
58      
59      public function sampleOperation1(){
60      
61          $this->adaptee->sampleOperation1();
62      }
63      
64      /**
65       *需要的方法
66       * 
67       */
68      
69      public function  sampleOperation2(){
70      
71          //this is your code
72          
73      }
74      
75      
76  }
View Code

优质内容筛选与推荐>>
1、@深入注解,在Java中设计和使用自己的注解
2、form提交url伪静态,php提交表单后页面重定向代码
3、32位操作系统能支持4G以上内存原因
4、Activity的Launch mode详解,A B C D的singleTask模式
5、消息队列(Message Queue)简介及其使用


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn