设计模式之 —— 桥接模式

概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.
应用场景:实现系统可能有多个角度分类,每一种角度都可能变化.

解释:桥接模式将继承模式转化成关联关系,他降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量.

优点:

    分离抽象接口及其实现部分.提高了比继承更好的解决方案.
    桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原来的系统.
    实现细节对客户不透明,可以隐藏实现细节.

缺点:桥接模式的引入会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行编程.

结构

桥梁模式所涉及的角色有:
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接 口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层 的操作。
具体实现化(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现。

例子1:

一个表就一个表带?


还是,一个表+多个可更换的表带?


例子2:代码分析

这里写图片描述

这里写图片描述

package bridge;

/**
 * 电脑品牌
 */
public interface Brand {
    void sale();
}

//  创建电脑牌子
class Lenovo implements Brand {

    @Override
    public void sale() {
        System.out.println("出售联想");
    }

}
class Dell implements Brand {

    @Override
    public void sale() {
        System.out.println("出售戴尔");
    }

}

// 新增牌子是十分方便的
class Shenzhou implements Brand {

    @Override
    public void sale() {
        System.out.println("出售神州");
    }

}
package bridge;

// 电脑类型+ 获得 品牌的引用
public class Computer {

    protected Brand brand;

    public Computer(Brand b) {
        this.brand = b;
    }
    public void sale(){
        brand.sale();
    }
}
//  创建电脑类型
class Desktop extends Computer {

    public Desktop(Brand b) {
        super(b);
    }

    @Override
    public void sale() {
        super.sale();
        System.out.println("出售台式电脑");
    }
}

class Laptop extends Computer {

    public Laptop(Brand b) {
        super(b);
    }

    @Override
    public void sale() {
        super.sale();
        System.out.println("出售笔记本");
    }
}
public class Client {
    public static void main(String[] args) {

        //  这样就笔记轻松的获得牌子 + 类型

        Computer  c = new Laptop(new Lenovo());
        c.sale();

        Computer c2 = new Desktop(new Shenzhou());
        c2.sale();


    }
}

桥接模式和适配器模式的区别:

共同点:桥接和适配器都是让两个东西配合工作

不同点:出发点不同。          
适配器:改变已有的两个接口,让他们相容,让他们同时工作。
桥接模式:分离抽象化和实现,目的是分离。桥好了之后,两边的东西还可以变化。

桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。

猜你喜欢

转载自blog.csdn.net/sinat_36789271/article/details/83587474