• 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();
            }
        }
        

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

            

  • 相关阅读:
    CompletableFuture使用
    ThreadLocal(Java)
    Java多线程高并发(读写锁ReentrantReadWriteLock)
    Java post和get请求的封装(copy直接用)
    Java多线程死锁举例
    Java Socket分发服务负载均衡
    CountDownLatch倒计时器
    Java数据结构(线性表-->顺序表简单实现)
    JavaFuture模式
    matplotlib总结
  • 原文地址:https://www.cnblogs.com/happy-dream/p/6565526.html
Copyright © 2020-2023  润新知