zoukankan      html  css  js  c++  java
  • php模式设计之 适配器模式

    什么时候会用到适配器模式?

    • 其实最简单的例子是当我们引用一个第三方类库。这个类库随着版本的改变,它提供的API也可能会改变。如果很不幸的是,你的应用里引用的某个API已经发生改变的时候,除了在心中默默地骂“wocao”之外,你还得去硬着头皮去改大量的代码。
    • 难道真的一定要如此吗?按照套路来说,我会回答“不是的”。我们有适配器模式啊~~
    • 当接口发生改变时,适配器模式就派上了用场。

    代码参考

    <?php
    abstract class Toy  
    {  
        public abstract function openMouth();  
      
        public abstract function closeMouth();  
    }  
      
    class Dog extends Toy  
    {  
        public function openMouth()  
        {  
            echo "Dog open Mouth
    ";  
        }  
      
        public function closeMouth()  
        {  
            echo "Dog close Mouth
    ";  
        }  
    }  
      
    class Cat extends Toy  
    {  
        public function openMouth()  
        {  
            echo "Cat open Mouth
    ";  
        }  
      
        public function closeMouth()  
        {  
            echo "Cat close Mouth
    ";  
        }  
    }
    
    
    //目标角色:红枣遥控公司  
    interface RedTarget  
    {  
        public function doMouthOpen();  
      
        public function doMouthClose();  
    }  
      
    //目标角色:绿枣遥控公司及  
    interface GreenTarget  
    {  
        public function operateMouth($type = 0);  
    }
    
    
    //类适配器角色:红枣遥控公司  
    class RedAdapter implements RedTarget  
    {  
        private $adaptee;  
      
        function __construct(Toy $adaptee)  
        {  
            $this->adaptee = $adaptee;  
        }  
      
        //委派调用Adaptee的sampleMethod1方法  
        public function doMouthOpen()  
        {  
            $this->adaptee->openMouth();  
        }  
      
        public function doMouthClose()  
        {  
            $this->adaptee->closeMouth();  
        }  
    }  
      
    //类适配器角色:绿枣遥控公司  
    class GreenAdapter implements GreenTarget  
    {  
        private $adaptee;  
      
        function __construct(Toy $adaptee)  
        {  
            $this->adaptee = $adaptee;  
        }  
      
        //委派调用Adaptee:GreenTarget的operateMouth方法  
        public function operateMouth($type = 0)  
        {  
            if ($type) {  
                $this->adaptee->openMouth();  
            } else {  
                $this->adaptee->closeMouth();  
            }  
        }  
    }
    
    
    
    class testDriver  
    {  
        public function run()  
        {  
             //实例化一只狗玩具  
            $adaptee_dog = new Dog();  
            echo "给狗套上红枣适配器
    ";  
            $adapter_red = new RedAdapter($adaptee_dog);  
            //张嘴  
            $adapter_red->doMouthOpen();  
            //闭嘴  
            $adapter_red->doMouthClose();  
            echo "给狗套上绿枣适配器
    ";  
            $adapter_green = new GreenAdapter($adaptee_dog);  
            //张嘴  
            $adapter_green->operateMouth(1);  
            //闭嘴  
            $adapter_green->operateMouth(0);  
        }  
    }  
      
    $test = new testDriver();  
    $test->run();
    
    正因为来之不易,所以才有了后来的倍加珍惜。
  • 相关阅读:
    将数字转换千分位分隔形式
    根据字符分割字符串的三种写法
    取出字符串中的汉字、字母或是数字
    生成n位随机字符串
    python中类的继承
    汇编语言与计算机体系结构
    DMA(direct memory access)直接内存访问
    数学归纳法证明时间复杂度
    具体名词的理解、单词的深意
    python的类和对象
  • 原文地址:https://www.cnblogs.com/jjxhp/p/9934588.html
Copyright © 2011-2022 走看看