Java设计模式之桥接模式

2018-05-16  本文已影响0人  bamboolmc

概念

桥接模式:亦称Bridge模式,构造型设计模式之一。
  将抽象部分(abstraction)和它的实现部分(implementor)分离,使这两部分能够独立的变化与扩展。
  将继承关系转换为关联关系,降低了类与类之间的耦合,降低代码量。

UML

桥接模式

角色

简单示例

最近手机摔了,破相了。无奈再换个新的吧,目前对性能没有太大的要求,就是需要能存储东西即可,性价比高当然更好了。选什么品牌呢?选多大的存储呢?这是个问题。这不就是可以用桥接模式么。

Implementor类:
实现部分(存储ROM)的抽象接口

package com.bamboolmc.designpattern.BridgeMode;

public interface ROM {
    /**
     * 配置ROM大小
     */
    public void ConfigRom ();
}

ConcreteImplementor类:
实现部分(存储ROM)的具体实现(32G/64G)

package com.bamboolmc.designpattern.BridgeMode;

public class ROM_32 implements ROM {
    @Override
    public void ConfigRom() {
        System.out.println("ROM配置了32G,只能存一些照片、电影");
    }
}
package com.bamboolmc.designpattern.BridgeMode;

public class ROM_64 implements ROM{
    @Override
    public void ConfigRom() {
        System.out.println("ROM配置了64G,能存放很多照片、电影");
    }
}

Abstraction类:
抽象部分(Mobile)的抽象类

package com.bamboolmc.designpattern.BridgeMode;

public abstract class Mobile {
    private ROM rom;

    public Mobile(ROM rom) {
        this.rom = rom;
    }

    public ROM getRom() {
        return rom;
    }

    public void setRom(ROM rom) {
        this.rom = rom;
    }

    public abstract void installROM();
}

Refined Abstraction类:
抽象部分(Mobile)的具体实现(Huawei/XiaoMi)

package com.bamboolmc.designpattern.BridgeMode;

public class HuaWei extends Mobile{
    public HuaWei(ROM rom) {
        super(rom);
    }

    @Override
    public void installROM() {
        System.out.println("HuaWei mobile:");
        this.getRom().ConfigRom();

    }
}
package com.bamboolmc.designpattern.BridgeMode;

public class XiaoMi extends Mobile{

    public XiaoMi(ROM rom) {
        super(rom);
    }

    @Override
    public void installROM() {
        System.out.println("XiaoMi mobile:");
        this.getRom().ConfigRom();

    }
}

Clicent类:

package com.bamboolmc.designpattern.BridgeMode;

public class BridgeClicent {
    public static void main(String[] args){
        ROM rom32g = new ROM_32();
        Mobile huawei = new HuaWei(rom32g);
        huawei.installROM();

        ROM rom64g = new ROM_64();
        Mobile xiaomi = new XiaoMi(rom64g);
        xiaomi.installROM();
    }
}

疑问

抽象部分和实现部分哪里进行了桥接?
抽象部分(Abstraction)保存一个对实现部分对象的引用,针对上述的示例,具体如下:
引用一:
抽象部分Mobile保存一个对实现部分ROM的引用

public abstract class Mobile {
    private ROM rom;

    public Mobile(ROM rom) {
        this.rom = rom;
    }
}

具体使用时实现:

public static void main(String[] args){
    ROM rom32g = new ROM_32();
    Mobile huawei = new HuaWei(rom32g);
}

适用环境

优缺点

缺点

优点

上一篇 下一篇

猜你喜欢

热点阅读