抽丝剥茧——桥接设计模式

2021-01-05 22:31:53 浏览数 (1)

桥接设计模式

今天我们来学习一个新的设计模式,桥接设计模式。它关注的点是将实现和抽象分层独立,互相不影响,可以独立进行扩展

我们先来看一下传统的干活方式,不使用桥接,让抽象层和实现层建立关系。

这里选用了小米手机的型号,可以看到无论是使用继承还是聚合的方式,抽象层和实现层之间均不相互独立,当有一者发生改变的时候,与之相关联的就会发生改变。也正是因为这个原因出现了桥接设计模式。

我们来具体看一下桥接设计模式的特点。

  • 实现类
  • 抽象类

我们来看一下桥接设计模式的UML图

它的主要特点就是在实现层和抽象层之间切入了一层,把这一层当作了桥,使用到具体的实现类,将之传入即可,两者互相分离,独立。扩展方便。

基于上述的原理图,我们来改良一下开篇的小米手机型号的问题。

我们引入了一个Model作为实现层和抽象层之间沟通的桥梁,通过构造参数将对应的实现类传入,实现具体的操作。

我们来看一下具体的代码实现。

  • 行为实现
代码语言:javascript复制
interface Mi {
    void play();
}

class Note extends Model{
    public Note(Mi mi) {
        super(mi);
    }

    @Override
    void play() {
        super.mi.play();
        System.out.println("这是Note系列手机");
    }
}

class Redme extends Model{
    public Redme(Mi mi) {
        super(mi);
    }

    @Override
    void play() {
        super.mi.play();
        System.out.println("这是RedMe系列手机");
    }
}

class Mix extends Model{
    public Mix(Mi mi) {
        super(mi);
    }

    @Override
    void play() {
        super.mi.play();
        System.out.println("这是Mix系列手机");
    }
}
代码语言:javascript复制
abstract class Model{
    protected Mi mi ;
    public Model(Mi mi){
        this.mi = mi ;
    }
    abstract void play() ;
}
  • 具体实现类
代码语言:javascript复制
class Note4 implements Mi{
    @Override
    public void play() {
        System.out.println("这是Note4");
    }

}


class RedmePro20 implements Mi{

    @Override
    public void play() {
        System.out.println("这是RedmePro20");
    }

}


class Mix3 implements Mi{
    @Override
    public void play() {
        System.out.println("这是Mix3");
    }
}

最后,桥接设计模式结束了。这是第6个设计模式,不过看到这里,兄弟们应该可以感觉的出来,设计模式是将一个问题复杂化,将系统解耦,让系统的扩展性变得更加的优雅。通过引入一个中间层,通过聚合的方式等等实现程序解耦。这个时候我们也会想到一个很重要的问题,时间换空间,空间换时间,也是类似,牺牲一方成就一方。

0 人点赞