• 技术文章 >后端开发 >php教程

    php设计模式之适配器模式详解

    韦小宝韦小宝2017-11-15 10:49:52原创884
    把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)--适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则

    %IXLL9KQ~2@46Y`2`Q){7OH.png

    <?php
    /*
     * 适配器模式
     */
    abstract class Toy
    {
        public abstract function openMouth();
    
        public abstract function closeMouth();
    }
    
    class Dog extends Toy
    {
        public function openMouth()
        {
            echo "Dog open Mouth\n";
        }
    
        public function closeMouth()
        {
            echo "Dog close Mouth\n";
        }
    }
    
    class Cat extends Toy
    {
        public function openMouth()
        {
            echo "Cat open Mouth\n";
        }
    
        public function closeMouth()
        {
            echo "Cat close Mouth\n";
        }
    }
    
    
    //目标角色:红枣遥控公司
    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 "没有适配器的普通模式";
            $adaptee_dog->openMouth();
            $adaptee_dog->closeMouth();
            echo "给狗套上红枣适配器\n";
            $adapter_red = new RedAdapter($adaptee_dog);
            //张嘴
            $adapter_red->doMouthOpen();
            //闭嘴
            $adapter_red->doMouthClose();
            echo "给狗套上绿枣适配器\n";
            $adapter_green = new GreenAdapter($adaptee_dog);
            //张嘴
            $adapter_green->operateMouth(1);
            //闭嘴
            $adapter_green->operateMouth(0);
        }
    }
    
    $test = new testDriver();
    $test->run();

    适配器模式将现有接口转化为客户类所期望的接口,实现了对现有类的复用,它是一种使用频率非常高的设计模式

    相关推荐:

    php适配器模式简介

    PHP适配器模式之类适配的代码解析

    php适配器模式介绍_PHP教程

    以上就是php设计模式之适配器模式详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:设计模式 适配器 php
    上一篇:php常量define与const的区别详解 下一篇:php面向对象设计原则概述
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• ThinkPHP实现递归无级分类代码少_PHP• PHP实现通过中文字符比率来判断垃圾评论的方法_PHP• ThinkPHP视图查询详解_PHP• PHP Session 变量的使用方法详解与实例代码_PHP• PHP autoload与spl_autoload自动加载机制的深入理解_PHP
    1/1

    PHP中文网