桥接模式,通往世界任何一个角落!

50 篇文章 0 订阅
44 篇文章 0 订阅

​ 大家好鸭,我系洪爵。今天又是设计模式的一天。

​ 洪爵想给大家讲一下桥接模式!桥接模式,通往世界的任何一个角落都必备的桥梁!

​ 桥接模式属于结构型模式,结构型模式旨在关注类与对象的组合。

​ 那么桥接模式能干什么呢?我们先来看一个场景:

​ 这世界上有很多种语言:中文、俄罗斯语、德语……等等,我们抽象出一个语言类,然后让中文、俄罗斯语等去继承这个语言类进行拓展。这个时候,要具体到某人去说这个语言了,这里有两种解决方案,一种是通过继承的方式去实现:

在这里插入图片描述

​ 我们会发现当需要具体到某一个人去说语言,就会产生很多类,这个时候我再添加一门语言,就需要增加4个类:某语言类,学生讲某语言类、老师讲某语言类和工人讲某语言类;同时的会多出4个继承关系,某语言继承语言类,学生讲某语言类、老师讲某语言类和工人讲某语言类继承某语言类。这无疑加大系统中类的数量,后续难以维护。

​ 我们再看方案二,方案二通过组合的方式去减少系统中类的个数便于系统的拓展和后续的维护,通过桥梁架起类和组合的关系,当增加一个语言或者增加一个述说者都不会影响到对方,因为语言都继承自语言类,述说的人都实现了述说者接口

在这里插入图片描述

​ 我们现在要新增一个语言类,那么就只需要添加1一个类,多一个继承关系;多一个述说者也是同样如此,而我们只需要把语言和述说者组合起来就可以了。

​ 有多个维度的变化时候(语言和述说者),抽象与实现分开来,使它们可以独立的变化,减少了类的个数,这种模式我们称之为桥接模式

​ 上代码加深印象:

// Language.java
public abstract class Language {
    Speaker speaker;

    public void setSpeaker(Speaker speaker) {
        this.speaker = speaker;
    }

    public abstract void speak();
}

// Speaker.java
public interface Speaker {
    void talking(String language);
}

// Chinese.java
public class Chinese extends Language {
    public void speak() {
        this.speaker.talking("Chinese");
    }
}

// English.java
public class English extends Language {
    public void speak() {
        this.speaker.talking("English");
    }
}

// Engineer.java
public class Engineer implements Speaker {
    public void talking(String language) {
        System.out.println("Engineer is talking in " + language);
    }
}

// Manager.java
public class Manager implements Speaker {
    public void talking(String language) {
        System.out.println("Manager is talking in " + language);
    }
}

// Worker.java
public class Worker implements Speaker {
    public void talking(String language) {
        System.out.println("Worker is talking in " + language);
    }
}

// Client.java
public class Client {
    public static void main(String[] args) {
        Language chinese = new Chinese();
        Language english = new English();

        Speaker worker = new Worker();
        Speaker engineer = new Engineer();
        Manager manager = new Manager();

        chinese.setSpeaker(manager);
        chinese.speak();
        chinese.setSpeaker(worker);
        chinese.speak();

        english.setSpeaker(engineer);
        english.speak();
    }
}
/*
Manager is talking in Chinese
Worker is talking in Chinese
Engineer is talking in English
*/

​ 本章桥接模式就到这里啦!希望对你有所帮助~

在这里插入图片描述
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。

道阻且长,往事作序,来日为章。

期待我们下一次相遇!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KnightHONG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值