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模式。

  • 相关阅读:
    NoSuchElementException if input is exhausted 报错
    批量更改文件后缀名
    初识Java
    简单cmd
    电脑操作简易快捷键
    java学习 Markdown+开始写博客
    JavaScript基础知识
    当数位数不够这,前面补0
    vs code 设置
    json日期格式转换为 2019-11-27 格式
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7753929.html
Copyright © 2011-2022 走看看