(13)桥接设计模式

一、概述

        桥接模式,也叫作桥梁模式,抽象部分与它的实现部分分离,使它们都可以独立地变化。

        一般来说,两个系统不应该直接地互相联接和依赖。相反,他们应该通过抽象来联接或依赖(参见依赖倒置和开闭原则),这样它们就是松耦合的,我们就可以在必要时轻松地修改实现,而不对系统的其它部分造成太大影响。

参与者

  • Abstraction:定义抽象类的接口。维护一个指向Implementor类型对象的指针。
  • RefinedAbstraction:扩充由Abstraction定义的接口。
  • Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。事实上这两个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
  • ConcreteImplementorA:实现Implementor接口并定义它的具体实现。
  • ConcreteImplementorB:实现Implementor接口并定义它的具体实现。

 类图

 二、示例

采摘袋分不同的材质(纸/塑料/麻袋等十多种)和不同的型号(大/中/小/迷你)组合起来,共40多种采摘袋

1、采摘袋有两个属性:大小与材质

2、取舍采摘袋的主要属性,是大小;附属属性是材质。

3、剥离掉附属属性材质,放入一个扩展实体中去。

1、 材质属性Material,单独成为一个扩展属性接口

2、 BagAbstraction组合Material接口对象

3、 BagAbstraction具有两个子类(大/小),与Material子类组合变化

三、代码

材料

/**
 * Material
 * 原材料
 */
public interface Material {
    // 装
    void draw();
}

/**
 * Material
 */
public class Plastic implements Material{
    @Override
    public void draw(){
        System.out.print("用塑料袋");
    }
}

/**
 * 包装接口
 * Material
 */
public class Sack implements Material{
    @Override
    public void draw(){
        System.out.print("用麻袋");
    }
}

/**
 * 采摘容器
 */
public abstract class BagAbstraction {
    // 原材料
    protected Material material;

    public void setMaterial(Material material) {
        this.material = material;
    }

    //采摘
    public abstract void pick();
}

/**
 * 采摘大袋
 */
public class BigBag extends BagAbstraction {

    @Override
    public void pick() {
        System.out.println("采摘水果开始");
        this.material.draw();
        System.out.println("采摘了一大袋");
    }
}

/**
 * 采摘小袋
 */
public class SmallBag extends BagAbstraction {

    @Override
    public void pick() {
        System.out.println("采摘水果开始");
        this.material.draw();
        System.out.println("采摘了一小包");
    }
}

/**
 * 园丁采摘水果                        
 */
public class BridgeClient {

    public static void main(String[] args) {

        // 选择袋子型号
        BagAbstraction bag = new SmallBag();

        //袋子材质
        Material material = new Sack();

        bag.setMaterial(material);

        //开始采摘
        bag.pick();
    }
}

四、适配器模式和桥接模式的异同

PS:都是把两个对象组合起来配合工作。桥接的目标是分离,适配的目标是合并。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值