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

    适配器模式

    现在有这样一个场景,某公司有一群动物,各种动物会吃饭,说话,普通实现方式就是写一个父类,其子类去继承父类实现该方法;

    <?php
    
        abstract class subject
        {
            abstract function talk();
            abstract function eat();
        }
        class cat extends subject
        {
            public function talk()
            {
                echo 'I can talk';
            }
            public function eat()
            {
                echo 'I can eat';
            }
        }

    现在其他动物要进来,不过他们调用的方式是doTalk和doEat两种方法,如果实现的话就是直接在增加两个方法

    <?php
    
        abstract class subject
        {
            abstract function talk();
            abstract function eat();
            abstract function doTalk();
            abstract function doEat();
        }
        class cat extends subject
        {
            public function talk()
            {
                echo 'I can talk';
            }
            public function eat()
            {
                echo 'I can eat';
            }
            public function doTalk()
            {
                $this->talk();
            }
            public function doEat()
            {
                $this->eat();
            }
        }

    可是以后陆续增加其他动物,程序员的工作量就特别大,如果要修改一些方法,那程序员会发疯的基本;有其他方法解决吗?当然有了,就是今天的主角,适配器模式。

    <?php
    
        abstract class subject
        {
            abstract function talk();
            abstract function eat();
            abstract function doTalk();
            abstract function doEat();
        }
        class cat extends subject
        {
            public function talk()
            {
                echo 'I can talk';
            }
            public function eat()
            {
                echo 'I can eat';
            }
            public function doTalk()
            {
                $this->talk();
            }
            public function doEat()
            {
                $this->eat();
            }
        }
    
        interface dog
        {
            public function doTalk();
            public function doEat();
        }
    
        class dogAdapter implements dog
        {
            private $_adaptee;
            public function __construct(subject $adaptee)
            {
                $this->_adaptee = $adaptee;
            }
            public function doTalk()
            {
                $this->_adaptee->talk();
            }
            public function doEat()
            {
                $this->_adaptee->eat();
            }
        }
        

    这样写就降低了代码的耦合度,实现了程序设计的开闭原则:对扩展开发,对修改关闭。

            

  • 相关阅读:
    Intersection(计算几何)
    Happy Matt Friends(DP)
    Dire Wolf(区间DP)
    Black And White(DFS+剪枝)
    最大子矩阵
    Largest Rectangle in a Histogram (最大子矩阵)
    City Game(最大子矩阵)
    Zipper (DP)
    QQpet exploratory park(DP)
    C++程序设计(第4版)读书笔记_指针、数组与引用
  • 原文地址:https://www.cnblogs.com/happy-dream/p/6565526.html
Copyright © 2011-2022 走看看