zoukankan      html  css  js  c++  java
  • Java设计模式(13)——结构型模式之桥梁模式(Bridge)

    一、概述

      概念

      将抽象实现脱耦,使得抽象和实现可以独立运行

      UML图

      

      角色:

      

      角色关系

      

     二、实践

      按照上面的角色建立相应的类

      抽象化角色

    /**
     * 抽象化角色
     *
     * @author Administrator
     **/
    public abstract class Abstraction {
        protected Implenmentor impl;
        
        public void operation() {
            impl.operationImpl();
        }
    }

      修正抽象角色

    /**
     * 修正抽象角色
     *
     * @author Administrator
     **/
    public class RefinedAbstraction extends Abstraction{
        @Override
        public void operation() {
            // 修正逻辑
            System.out.println("修正抽象角色");
        }
    }

      实现化角色(接口形式)

    /**
     * 实现化角色
     *
     * @author Administrator
     **/
    public abstract class Implenmentor {
        public abstract void operationImpl();
    }

      具体实现化角色(只给出一个示例,可以有多个具体实现)

    /**
     * 具体实现角色
     *
     * @author Administrator
     **/
    public class ConcreteImplenmentor extends Implenmentor{
        @Override
        public void operationImpl() {
            // 子类重写逻辑
            System.out.println("具体实现子类");
        }
    }

       有了以上抽象角色的示例,我们再来看看《Java与模式》中的飞机制造的具体例子:

      引入问题

      

      常规思路如下:

      

      联系最基本的检验原则,检查设计的问题

      

      联系本节桥梁模式,做出改进

      

       抽象角色

    /**
     * 飞机类抽象接口
     *
     * @author Administrator
     **/
    public abstract class Airplane {
        protected AirplaneMaker airplaneMaker;
    
        public abstract void fly();
    }

      修正角色

    /**
     * 载客飞机,作为飞机的修正角色
     *
     * @author Administrator
     **/
    public class PassengerAirplane extends Airplane{
        @Override
        public void fly() {
            // 修正逻辑
            System.out.println("修正角色");
        }
    }

      

    /**
     * 载货飞机,作为飞机的修正角色
     *
     * @author Administrator
     **/
    public class CargoPlane extends Airplane{
        @Override
        public void fly() {
            // 修正逻辑
            System.out.println("修正角色");
        }
    }

      实现化角色

    /**
     * 飞机制造商接口
     *
     * @author Administrator
     **/
    public abstract class AirplaneMaker {
        public abstract void produce();
    }

      具体实现化角色(此处省略另外的相似的角色)

    /**
     * 具体实现角色
     *
     * @author Administrator
     **/
    public class Airbus extends AirplaneMaker{
        @Override
        public void produce() {
            // 具体实现逻辑
            System.out.println("具体实现角色");
        }
    }

      当然,可以参考更多的例子,参见http://www.cnblogs.com/forlina/archive/2011/06/22/2087350.html

                      http://www.cnblogs.com/Coda/p/4289593.html

       以上的例子都不要拘泥于形式,注意从UML图理解

    三、改进与思考

        使用场景

        当一个类的子类需要扩展时,如果要在两个维度进行扩展,那么就可以使用Bridge模式。

  • 相关阅读:
    RHEL因为selinux设置失误,无法重启问题。(centos适用)
    Linux系统忘记管理员密码(CentOS、RHEL、Ubuntu)
    cobbler PXE 安装系统时出现的问题
    虚拟机ping 不通主机,主机可ping 虚拟机解决方法
    CentOS7系统更改网卡名为eth0
    PXE-cobbler 无人值守装机------续
    PXE-cobbler 无人值守装机
    DELL PowerEdge R410系统日志满报错
    matlab添加toolbox失败的解决办法
    vs2017+opencv3.4.0的配置方法
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7753929.html
Copyright © 2011-2022 走看看