zoukankan      html  css  js  c++  java
  • 桥接模式-

    <?php
    
    //虫族的基础类
    class Zerg
    {
        //实现钻地的基本对象
        public $imp;
        //负责切换钻地基本对象的方法
        public function setImp($imp)
        {
            $this->imp = $imp;//$this->imp接收的是一个实例化后的Implementor接口下的具体对象
        }
    
        //部队的钻地方法,可以扩展基本对象的钻地
        public function underground()
        {
            $this->imp->underground();//这个underground()来自Implementor接口中的方法
        }
    }
    
    //小狗的类
    class Zergling extends Zerg
    {
        /*调用基本的钻地方法,然后实现扩展,这里简单的echo
        这个方法很灵活,除了在这里实现功能,还能继承父类的方法,
        而且,父类的这个方法中实现的是什么,是由另外一个对象-方法传过来的*/
        public function underground()
        {
            parent::underground();
            echo '现在地刺钻地了,小狗不能动<br>';
        }
    }
    
    //地刺的类
    class Lurker extends Zerg
    {
        //调用基本的钻地方法,然后实现扩展,这里简单的echo
        public function underground()
        {
            parent::underground();
            echo '现在地刺钻地了,能够进行攻击<br>';
        }
    }
    
    //钻地的基本接口
    interface Implementor
    {
        //基本的钻地方法
        public function underground();
    }
    
    //隐形钻地的基本类
    class InvisibleImp implements Implementor
    {
        //基本的钻地方法
        public function underground()
        {
            echo '钻地,不可见<br>';
        }
    }
    
    //不隐形钻地的基本类,比如玩家自己看到的或被探测到的
    class VisibleImp implements Implementor
    {
        //基本的钻地方法
        public function underground()
        {
            echo '钻地,可见<br>';
        }
    }
    
    /*测试*/
    
    $z1 = new Zergling();//造一个小狗
    $z1->setImp(new InvisibleImp());//小狗钻地功能由钻地类在小狗的父类中设置,并在小狗钻地方法中继承
    $z1->underground();//这里的underground()是Zergling类中的方法
    
    
    echo '<hr>';
    
    
    $l1 = new Lurker();//造一个地刺
    $l1->setImp(new InvisibleImp());
    $l1->underground();
    
    
    echo '<hr>';
    
    
    $l1->setImp(new VisibleImp());//敌人急了,马上飞过来一个科技球,查看隐身物体
    $l1->underground();//敌人看到地刺了,地刺继续攻击敌人
    
    ?>

    用途总结:桥接模式可以将基本的实现和具体的调用类分开,调用类可以扩展更复杂的实现。

    实现总结:需要一些基本执行类,实现基本的方法,比如上面的两个钻地类。同时我们可以设计多个不同的扩展调用类,将基本的功能扩展,比如地刺和小狗就进一步实现了不同的在地下的行为。

  • 相关阅读:
    接口和抽象的区别
    接口
    jquery Ajax提交表单数据
    SQL 检查 是否存在 表 临时表
    ASP.NET MVC 设置Area中 Controller 的方法 默认启动页
    json 序列化为数组
    C# Lamda中类似于SQL 中的 In 功能
    各种webservice调用地址
    ASP.NET获取客户端IP地址
    C#反射机制 Type类型
  • 原文地址:https://www.cnblogs.com/jiufen/p/5000819.html
Copyright © 2011-2022 走看看