美文网首页程序员
身为java开发人员,你知道桥接模式还能这样用吗?

身为java开发人员,你知道桥接模式还能这样用吗?

作者: 程序员伟杰 | 来源:发表于2020-08-04 17:29 被阅读0次

桥接模式

桥接模式定义:

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。

在生活中有很多桥接模式的例子,比如:

  • 在纸上画图,可以选择红色的彩笔,也可以选择绿色的彩笔;
  • 自制饮料,可以选择西瓜做原材料,也可以选择草莓做原材料;
  • 泡茶,可以选择毛尖茶,也可以选择花茶;

这些例子的共同特点都是做一件事,可以选择不同的方法去做,并且做得结果是不同的;

所以桥接模式的含义就是,将这些不同的方法(实现部分)分离出来,使它们可以独立变化。

模式优缺点

优点

  • 由于抽象与实现分离,所以扩展能力强;
  • 其实现细节对客户透明。

缺点

  • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。

模式角色

  • 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
  • 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  • 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
  • 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

示例

1. 示例描述

制作饮料案例,选择不同的原材料做果汁,原材料有苹果、橘子。

2. 设计思路

可以按照以下步骤进行

  1. 定义桥接口,原材料不同导致最终结果不同,所以桥接口定义为果汁源材料JuiceMaterial
  2. 定义具体原材料,AppleMaterial和OrangeMaterial
  3. 定义抽象类Machine,并抽象work方法
  4. 定义榨汁机具体类JuiceExtractor 并集成Machine,重写工作方法,并可以更换原材料。

3. 示例代码

  • 果汁原材料抽象接口

    /**
     * @Description 果汁原材料
     */
    public interface JuiceMaterial {
        /**
         * 获取原材料名
         * @return 原材料名
         */
        String getMaterial();
    }
    
    
  • 原材料具体接口

    /**
     * @Description 苹果原材料
     */
    public class AppleMaterial implements JuiceMaterial {
        @Override
        public String getMaterial() {
            return "apple";
        }
    }
    /**
     * @Description 橘子原材料
     */
    public class OrangeMaterial implements JuiceMaterial {
        @Override
        public String getMaterial() {
            return "orange";
        }
    }
    
    
  • 抽象机器接口

    /**
     * @Description 机器
     */
    public abstract class Machine {
        /**
         * 机器工作运转
         */
        protected abstract void work();
    }
    
    
  • 具体机器接口

    /**
     * @Description 榨汁机
     */
    public class JuiceExtractor extends Machine {
    
        private JuiceMaterial juiceMaterial;
    
        public JuiceExtractor(JuiceMaterial material){
            this.juiceMaterial = material;
        }
    
        @Override
        protected void work() {
            System.out.println(
                    String.format("The %s juice is being squeezed!" , this.juiceMaterial.getMaterial())
            );
        }
    }
    
    
  • 测试代码

        @Test
        public void test(){
            JuiceMaterial appleMaterial = new AppleMaterial();
            JuiceMaterial orangeMaterial = new OrangeMaterial();
    
            Machine appleJuiceExtractor = new JuiceExtractor(appleMaterial);
            appleJuiceExtractor.work();
    
            Machine orangeJuiceExtractor = new JuiceExtractor(orangeMaterial);
            orangeJuiceExtractor.work();
        }
    
    
  • 测试结果

    The apple juice is being squeezed!
    The orange juice is being squeezed!

最后

感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

相关文章

  • 身为java开发人员,你知道桥接模式还能这样用吗?

    桥接模式 桥接模式定义: 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,...

  • Java设计模式<桥接模式>

    Java设计模式<桥接模式> 意图 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 2018-06-27随笔

    java桥接模式:两个维度的变化,可以用桥接模式,一个作为抽象部分,一个作为实现部分,各自独立变化,使用组合对象的...

  • java 桥接模式

    用于解决系统中多维度问题

  • Java桥接模式

    概念 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。...

  • 桥接模式-java

    概念: 桥接模式将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个...

  • Java 桥接模式

    一、定义 将抽象和实现分离,使他们可以独立变化,他是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维...

  • java/android 设计模式学习笔记(8)---桥接模式

    java/android 设计模式学习笔记(8)---桥接模式 【备注】只用于个人收藏

  • Java设计模式--桥接模式

    桥接模式就是创建一道桥梁来连接两种类,一般都是对抽象和实现的桥接。对于那些不希望使用继承或因为多层次继承导致系统类...

网友评论

    本文标题:身为java开发人员,你知道桥接模式还能这样用吗?

    本文链接:https://www.haomeiwen.com/subject/hmuprktx.html