zoukankan      html  css  js  c++  java
  • 适配器模式

    适配器模式:

    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作。

    主要角色:
    Target(目标角色):客户希望使用的接口,需要适配成这个接口。
    Adaptee(源角色):被适配的接口,需要进行适配的接口。
    Adapter(适配角色):对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类。

    适用场景
    1、你想使用一个已经存在的类,而它的接口不符合你的需求
    2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
    3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)

    适配器模式分为类适配器和对象适配器,不考虑类适配器了,两种适配器的区别和适配器模式的抽象代码可参考:http://blog.csdn.net/wzllai/article/details/7832815

    一个实例

    一个纸书的打开和翻页接口,但是后来出现了电子书,只有启动和下一页接口,怎么适配呢?

    interface PaperBookInterface {
        public function turnPage();
        public function open();
    }
    
    
    class Book implements PaperBookInterface {
        public function open() {
            echo "打开纸书";
        }
        public function turnPage() {
            echo "纸书翻页";
        }
    }
    
    
    interface EBookInterface {
        public function pressNext();
        public function pressStart();
    }
    
    
    class Kindle implements EBookInterface {
        public function pressNext() {
            echo "按下一页";
        }
    
        public function pressStart() {
            echo "按开关启动";
        }
    }
    
    class EBookAdapter implements PaperBookInterface{
        private $ebook;
        
        public function __construct(EBookInterface $kindle){
            $this->ebook = $kindle;
        }
        public function open() {
            $this->ebook->pressStart();
        }
        public function turnPage() {
            $this->ebook->pressNext();
        }
        
        
    }
    $book = new Book();
    $book->open();
    $book->turnPage();
    
    $kindle = new EBookAdapter(new Kindle());
    $kindle->open();
    $kindle->turnPage();
  • 相关阅读:
    leetcode简单刷题
    pycharm常用快捷键
    pycharm之black配置for python file(代码格式化工具)
    appium
    scheduleAtFixedRate 和 timer 执行对比
    Java 线程池创建的四种方式
    java 数据库连接池和普通连接 对比
    java 线程池 实现
    java 定时任务 Timer 范例
    java加载properties配置文件的几种方法
  • 原文地址:https://www.cnblogs.com/leezhxing/p/4714675.html
Copyright © 2011-2022 走看看