zoukankan      html  css  js  c++  java
  • PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

    如下图(借图): 

     // 设置书的接口

    // 书接口
    interface BookInterface
    {
        // 翻页方法
        public function turnPage();
    
        // 打开书方法
        public function open();
    }
    // 纸质书实现类
    class Book implements BookInterface
    {
        public function turnPage()
        {
            echo "纸质书翻页". "<br>";
        }
    
        public function open()
        {
            echo "纸质书打开". "<br>";
        }
    }

    客户端测试:

    // 客户端测试
    $book = new Book();
    $book->open();
    $book->turnPage();

    输出结果:

    纸质书打开
    纸质书翻页

    这时候,你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

    如下:

    // 待适配对象
    class Kindle
    {
        public function turnPage()
        {
            echo "电子书翻页". "<br>";
        }
    
        public function open()
        {
            echo "电子书打开". "<br>";
        }
    }

    // 适配器

    class KindleAdapter implements BookInterface
    {
        protected $_kindle;
    
        public function __construct($obj)
        {
            $this->_kindle = $obj;
        }
    
    
        public function turnPage()
        {
            $this->_kindle->turnPage();
        }
    
        public function open()
        {
            $this->_kindle->open();
        }
    }

    // 客户端测试

    $kindle = new KindleAdapter(new Kindle());
    $kindle->open();
    $kindle->turnPage();

    // 输出结果

    电子书打开
    电子书翻页

    后记:

    本文仅为个人学习笔记整理,如有纰漏之处,欢迎指正!

  • 相关阅读:
    cocos2dx——九宫格CCScale9Sprite
    COCOS学习笔记--TexturePacker使用详解
    leetcode 旋转数组
    leetcode 从排序数组中删除重复项
    使用javascript随机生成斗地主玩家手牌
    模仿w3c school的示例导航栏
    c#中快速排序的学习
    常用语法梳理
    技巧类
    markdown备忘
  • 原文地址:https://www.cnblogs.com/wilburxu/p/6200570.html
Copyright © 2011-2022 走看看